use rustyscript::{json_args, Error, Module, Runtime, RuntimeOptions};
use std::time::Duration;
fn main() -> Result<(), Error> {
let module = Module::new(
"test.js",
"
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
export async function test() {
await sleep(10);
return 2;
}
export async function fetch_example() {
return new Promise((accept, reject) => {
fetch('https://api.github.com/users/mralexgray/repos', {
method: 'GET',
headers: {
Accept: 'application/json',
},
}).then(response => response.json())
.then(json => accept(json))
.catch(e => reject(e));
});
}
export async function event_source_example() {
return new Promise((accept, reject) => {
var source = new EventSource('https://www.w3schools.com/html/demo_sse.php');
source.addEventListener('message', (e) => {
accept(e.data);
});
source.addEventListener('error', (e) => {
reject(e)
});
});
}
",
);
let mut runtime = Runtime::new(RuntimeOptions {
timeout: Duration::from_millis(10000),
..Default::default()
})?;
let module_handle = runtime.load_module(&module)?;
let value: usize = runtime.call_function(Some(&module_handle), "test", json_args!())?;
println!("Got value: {}", value);
assert_eq!(value, 2);
let data: rustyscript::serde_json::Value =
runtime.call_function(Some(&module_handle), "fetch_example", json_args!())?;
println!("Got {:?} bytes", data.to_string().len());
let data: rustyscript::serde_json::Value =
runtime.call_function(Some(&module_handle), "event_source_example", json_args!())?;
println!("Got event: {}", data);
Ok(())
}