diff --git a/Cargo.lock b/Cargo.lock index 4796d80f2a..f6d8f01c96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3332,6 +3332,7 @@ dependencies = [ "wasi-cap-std-sync", "wasmparser", "wasmtime-cache", + "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", @@ -3457,6 +3458,15 @@ dependencies = [ "wasmtime", ] +[[package]] +name = "wasmtime-component-macro" +version = "0.39.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "wasmtime-cranelift" version = "0.39.0" diff --git a/crates/component-macro/Cargo.toml b/crates/component-macro/Cargo.toml new file mode 100644 index 0000000000..4e924ec976 --- /dev/null +++ b/crates/component-macro/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "wasmtime-component-macro" +version = "0.39.0" +authors = ["The Wasmtime Project Developers"] +description = "Macros for deriving component interface types from Rust types" +license = "Apache-2.0 WITH LLVM-exception" +repository = "https://github.com/bytecodealliance/wasmtime" +documentation = "https://docs.rs/wasmtime-component-macro/" +categories = ["wasm"] +keywords = ["webassembly", "wasm"] +edition = "2021" + +[lib] +proc-macro = true + +[dependencies] +proc-macro2 = "1.0" +quote = "1.0" +syn = { version = "1.0", features = ["extra-traits"] } + +[badges] +maintenance = { status = "actively-developed" } diff --git a/crates/component-macro/src/lib.rs b/crates/component-macro/src/lib.rs new file mode 100644 index 0000000000..d319e6df75 --- /dev/null +++ b/crates/component-macro/src/lib.rs @@ -0,0 +1,382 @@ +use proc_macro2::{Literal, TokenStream, TokenTree}; +use quote::{format_ident, quote}; +use std::collections::HashSet; +use syn::{parse_macro_input, parse_quote, Data, DeriveInput, Error, Result}; + +#[derive(Debug)] +enum Style { + Record, + Variant, + Enum, + Union, +} + +fn find_style(input: &DeriveInput) -> Result