diff --git a/__wasm/wit-bindgen-sample/README.md b/__wasm/wit-bindgen-sample/README.md index 7a1c4c2..f26674d 100644 --- a/__wasm/wit-bindgen-sample/README.md +++ b/__wasm/wit-bindgen-sample/README.md @@ -1,3 +1,12 @@ +Requires: +* Rust (with target wasm32-unknown-unknown) + + +Check out wit-bindgen: +```shell git clone https://github.com/bytecodealliance/wit-bindgen.git +``` + + diff --git a/__wasm/wit-bindgen-sample/container/src/fn_common.rs b/__wasm/wit-bindgen-sample/container/src/fn_common.rs index 9b3d50b..2a0abb6 100644 --- a/__wasm/wit-bindgen-sample/container/src/fn_common.rs +++ b/__wasm/wit-bindgen-sample/container/src/fn_common.rs @@ -14,9 +14,9 @@ impl FnResult { } } - pub fn success(result: String) -> Self { + pub fn success(result: impl Into) -> Self { FnResult { - result: Some(result), + result: Some(result.into()), error: None, } } diff --git a/__wasm/wit-bindgen-sample/container/src/fn_fetch.rs b/__wasm/wit-bindgen-sample/container/src/fn_fetch.rs index f790fdc..9babf55 100644 --- a/__wasm/wit-bindgen-sample/container/src/fn_fetch.rs +++ b/__wasm/wit-bindgen-sample/container/src/fn_fetch.rs @@ -96,16 +96,16 @@ pub fn do_fetch(params: &str) -> FnResult { let mut result_map = Map::new(); result_map.insert("status".to_string(), Value::Number(Number::from(status))); - let mut header_map = Map::new(); + let mut headers_map = Map::new(); for (k, v) in headers { let header_key = k.map(|n| n.as_str().to_string()).unwrap_or_else(|| "".to_string()); let header_value = match v.to_str() { Err(_) => continue, Ok(v) => v.to_string(), }; - header_map.insert(header_key, Value::String(header_value)); + headers_map.insert(header_key, Value::String(header_value)); } - result_map.insert("headers".to_string(), Value::Object(header_map)); + result_map.insert("headers".to_string(), Value::Object(headers_map)); result_map.insert("body".to_string(), Value::String(String::from_utf8_lossy(&body_buff).to_string())); FnResult::success(format!("{}", Value::Object(result_map))) diff --git a/__wasm/wit-bindgen-sample/container/src/main.rs b/__wasm/wit-bindgen-sample/container/src/main.rs index 4d9b4ff..96d1bcf 100644 --- a/__wasm/wit-bindgen-sample/container/src/main.rs +++ b/__wasm/wit-bindgen-sample/container/src/main.rs @@ -30,15 +30,15 @@ fn main() -> Result<()> { )?; let a = exports.eval_javascript(&mut store, r##" function hi(name) { return "hi: " + name; } - let a = []; - a.push(fetch('https://hatter.ink/util/print_request.action')); - for (let i = 0; i < 3; i++) { a.push(i); } - a.push({ - id: 1, name: 'hatter' - }); - a.push(hi('001')); - a.push(hi('002')); - // let a = fetch('https://hatter.ink/util/print_request.action'); + // let a = []; + // a.push(fetch('https://hatter.ink/util/print_request.action')); + // for (let i = 0; i < 3; i++) { a.push(i); } + // a.push({ + // id: 1, name: 'hatter' + // }); + // a.push(hi('001')); + // a.push(hi('002')); + let a = fetch('https://hatter.ink/util/print_request.action'); JSON.stringify(a) // a "##); diff --git a/__wasm/wit-bindgen-sample/engine/src/lib.rs b/__wasm/wit-bindgen-sample/engine/src/lib.rs index cc0b421..91768a6 100644 --- a/__wasm/wit-bindgen-sample/engine/src/lib.rs +++ b/__wasm/wit-bindgen-sample/engine/src/lib.rs @@ -9,15 +9,12 @@ struct Exports; impl exports::Exports for Exports { fn eval_javascript(script: String) -> String { let mut ctx = Context::default(); - ctx.register_global_function("fetch", 0, fetch_fn); + ctx.register_global_function("fetch", 0, do_fetch); let o = match ctx.eval(&script) { JsResult::Ok(o) => o, JsResult::Err(o) => o, }; - format!("{}", o.to_json(&mut ctx).unwrap()) - // let a = container::fetch(""); - // let a = fetch_from_host(""); - // format!("eval: {}, fetched: {}", s, a) + format!("{}", o.to_json(&mut ctx).expect("To JSON error")) } } @@ -27,14 +24,17 @@ struct FetchResult { result: Option, } -fn fetch_fn(_: &JsValue, args: &[JsValue], ctx: &mut Context) -> JsResult { +fn do_fetch(_: &JsValue, args: &[JsValue], ctx: &mut Context) -> JsResult { + if args.is_empty() { + return JsResult::Err(JsValue::String(JsString::from("Requires at least one argument"))); + } let mut fetch_params_map = Map::new(); fetch_params_map.insert("url".to_string(), args[0].to_json(ctx).expect("error")); if args.len() > 1 { fetch_params_map.insert("params".to_string(), args[1].to_json(ctx).expect("error")); } let fetch_params = format!("{}", Value::Object(fetch_params_map)); - + let fetch_result_string = container::fetch(&fetch_params); let fetch_result: FetchResult = serde_json::from_str(&fetch_result_string).expect("from str error"); if let Some(result) = fetch_result.result { @@ -42,5 +42,5 @@ fn fetch_fn(_: &JsValue, args: &[JsValue], ctx: &mut Context) -> JsResult".to_string()))))) } \ No newline at end of file