///
/// This example demonstrates how to create a snapshot from a module and save it to a file.
/// Snapshots can be used to massively decrease the startup time of a Runtime instance (15ms -> 3ms) by pre-loading
/// extensions and modules into the runtime state before it is created. A snapshot can be used on any runtime with
/// the same set of extensions and options as the runtime that created it.
///
use rustyscript::{Error, Module, SnapshotBuilder};
use std::fs;
fn main() -> Result<(), Error> {
// A module we want pre-loaded into the snapshot
let module = Module::new(
"my_module.js",
"export function importantFunction() { return 42; }",
);
// Create a snapshot with default runtime options
// These options need to be the same as the ones used to create the runtime
let snapshot = SnapshotBuilder::new(Default::default())?
.with_module(&module)?
.finish();
// Save the snapshot to a file
fs::write("snapshot.bin", snapshot)?;
Ok(())
// To use the snapshot, load it with `include_bytes!` into the `RuntimeOptions` struct:
// const STARTUP_SNAPSHOT: &[u8] = include_bytes!("snapshot.bin");
// let options = RuntimeOptions {
// startup_snapshot: Some(STARTUP_SNAPSHOT),
// ..Default::default()
// };
}