forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| 
								 | 
							
								/* run code, get result as a Rust String */
							 | 
						||
| 
								 | 
							
								fn eval_code(scope: &mut v8::HandleScope, code: &str) -> std::string::String {
							 | 
						||
| 
								 | 
							
								  let source = v8::String::new(scope, &code).unwrap();
							 | 
						||
| 
								 | 
							
								  let script = v8::Script::compile(scope, source, None).unwrap();
							 | 
						||
| 
								 | 
							
								  let result = script.run(scope).unwrap();
							 | 
						||
| 
								 | 
							
								  return result.to_string(scope).unwrap().to_rust_string_lossy(scope);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn main() {
							 | 
						||
| 
								 | 
							
								  create_snapshot();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn create_snapshot() {
							 | 
						||
| 
								 | 
							
								  /* initialize */
							 | 
						||
| 
								 | 
							
								  let platform = v8::new_default_platform(0, false).make_shared();
							 | 
						||
| 
								 | 
							
								  v8::V8::initialize_platform(platform);
							 | 
						||
| 
								 | 
							
								  v8::V8::initialize();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  let startup_data = {
							 | 
						||
| 
								 | 
							
								    let mut isolate = v8::Isolate::snapshot_creator(None);
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      let handle_scope = &mut v8::HandleScope::new(&mut isolate);
							 | 
						||
| 
								 | 
							
								      let context = v8::Context::new(handle_scope);
							 | 
						||
| 
								 | 
							
								      let context_scope = &mut v8::ContextScope::new(handle_scope, context);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* load library */
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        let script = std::fs::read_to_string("./xlsx.full.min.js").expect("Error reading xlsx.full.min.js");
							 | 
						||
| 
								 | 
							
								        let _result = eval_code(context_scope, &script);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      context_scope.set_default_context(context);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    isolate.create_blob(v8::FunctionCodeHandling::Clear).unwrap()
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  let blob: Vec<u8> = startup_data.to_vec();
							 | 
						||
| 
								 | 
							
								  std::fs::write("snapshot.bin", blob).unwrap();
							 | 
						||
| 
								 | 
							
								}
							 |