diff --git a/Cargo.lock b/Cargo.lock index f6e1ac01..1709f54c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ version = "0.2.0" source = "git+https://github.com/rainlanguage/alloy-ethers-typecast?rev=a6bcb86b9b61a56d2440d33313f024297ce737bb#a6bcb86b9b61a56d2440d33313f024297ce737bb" dependencies = [ "alloy-primitives 0.6.4", - "alloy-sol-types", + "alloy-sol-types 0.6.4", "async-trait", "derive_builder", "ethers", @@ -153,6 +153,24 @@ dependencies = [ "bytes", ] +[[package]] +name = "alloy-sol-macro" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970e5cf1ca089e964d4f7f7afc7c9ad642bfb1bdc695a20b0cba3b3c28954774" +dependencies = [ + "const-hex", + "dunce", + "heck 0.4.1", + "indexmap", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.60", + "syn-solidity 0.5.4", + "tiny-keccak", +] + [[package]] name = "alloy-sol-macro" version = "0.6.4" @@ -169,7 +187,7 @@ dependencies = [ "quote", "serde_json", "syn 2.0.60", - "syn-solidity", + "syn-solidity 0.6.4", "tiny-keccak", ] @@ -191,6 +209,18 @@ dependencies = [ "winnow 0.6.6", ] +[[package]] +name = "alloy-sol-types" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a059d4d2c78f8f21e470772c75f9abd9ac6d48c2aaf6b278d1ead06ed9ac664" +dependencies = [ + "alloy-primitives 0.5.4", + "alloy-sol-macro 0.5.4", + "const-hex", + "serde", +] + [[package]] name = "alloy-sol-types" version = "0.6.4" @@ -199,7 +229,7 @@ checksum = "ad09ec5853fa700d12d778ad224dcdec636af424d29fad84fb9a2f16a5b0ef09" dependencies = [ "alloy-json-abi 0.6.4", "alloy-primitives 0.6.4", - "alloy-sol-macro", + "alloy-sol-macro 0.6.4", "const-hex", "serde", ] @@ -2985,6 +3015,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metadata_wasm" +version = "0.1.0" +dependencies = [ + "hex", + "js-sys", + "rain-metadata 0.0.2-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", + "serde-wasm-bindgen", + "serde_bytes", + "serde_cbor", + "wasm-bindgen", + "wasm-bindgen-futures", +] + [[package]] name = "mime" version = "0.3.17" @@ -3719,7 +3764,7 @@ dependencies = [ "alloy-ethers-typecast", "alloy-json-abi 0.5.4", "alloy-primitives 0.5.4", - "alloy-sol-types", + "alloy-sol-types 0.6.4", "anyhow", "clap", "deflate", @@ -3747,12 +3792,43 @@ dependencies = [ "validator", ] +[[package]] +name = "rain-metadata" +version = "0.0.2-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a4cc20d0b88a82e1ade286f7f3999c7a6faac02df49c393a44eca914330d80" +dependencies = [ + "alloy-json-abi 0.5.4", + "alloy-primitives 0.5.4", + "alloy-sol-types 0.5.4", + "anyhow", + "clap", + "deflate", + "futures", + "graphql_client", + "inflate", + "itertools 0.10.5", + "once_cell", + "regex", + "reqwest", + "schemars", + "serde", + "serde_bytes", + "serde_cbor", + "serde_json", + "strum 0.24.1", + "tokio", + "tracing", + "tracing-subscriber", + "validator", +] + [[package]] name = "rain-metadata-bindings" version = "0.1.0" dependencies = [ "alloy-primitives 0.5.4", - "alloy-sol-types", + "alloy-sol-types 0.6.4", ] [[package]] @@ -4344,6 +4420,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_bytes" version = "0.11.14" @@ -4715,6 +4802,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ede2e5b2c6bfac4bc0ff4499957a11725dc12a7ddb86270e827ef575892553" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.60", +] + [[package]] name = "syn-solidity" version = "0.6.4" diff --git a/Cargo.toml b/Cargo.toml index 6a88cc33..e9e5f224 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ resolver = "2" members = [ "crates/bindings", "crates/cli" -, "crates/metaboard"] +, "crates/metaboard", "crates/metadata_wasm"] [workspace.dependencies] reqwest = { version = "0.11.17", features = ["json"] } diff --git a/crates/metadata_wasm/Cargo.toml b/crates/metadata_wasm/Cargo.toml new file mode 100644 index 00000000..0743cce9 --- /dev/null +++ b/crates/metadata_wasm/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "metadata_wasm" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_cbor = "0.11" +hex = "0.4.3" +wasm-bindgen = "0.2" +js-sys = "0.3" +rain-metadata = "0.0.2-alpha.6" +serde_bytes = "0.11.12" +serde-wasm-bindgen = "0.4" +wasm-bindgen-futures = "0.4" \ No newline at end of file diff --git a/crates/metadata_wasm/src/lib.rs b/crates/metadata_wasm/src/lib.rs new file mode 100644 index 00000000..fbd94108 --- /dev/null +++ b/crates/metadata_wasm/src/lib.rs @@ -0,0 +1,22 @@ +use wasm_bindgen::prelude::*; +use rain_metadata::meta::{ + RainMetaDocumentV1Item }; +use serde_wasm_bindgen::to_value; + +#[wasm_bindgen] +pub fn cbor_decode_wasm(data: &[u8]) -> JsValue { + // Decode the data + let cbor_decoded = RainMetaDocumentV1Item::cbor_decode(&data); + + // Convert the result to JsValue + match cbor_decoded { + Ok(decoded) => { + let js_value = to_value(&decoded); + match js_value { + Ok(value) => value, + Err(_) => JsValue::from_str("Error converting to JsValue"), + } + } + Err(err) => JsValue::from_str(&format!("CBOR decoding error: {:?}", err)), + } +}