diff --git a/crates/component-macro/src/bindgen.rs b/crates/component-macro/src/bindgen.rs index 2a813ef5f736..b589665b5def 100644 --- a/crates/component-macro/src/bindgen.rs +++ b/crates/component-macro/src/bindgen.rs @@ -78,7 +78,16 @@ impl Parse for Config { Opt::Async(val) => opts.async_ = val, Opt::TrappableErrorType(val) => opts.trappable_error_type = val, Opt::DuplicateIfNecessary(val) => opts.duplicate_if_necessary = val, - Opt::OnlyInterfaces(val) => opts.only_interfaces = val, + Opt::Interfaces(s) => { + if source.is_some() { + return Err(Error::new(s.span(), "cannot specify a second source")); + } + source = Some(Source::Inline(format!( + "default world interfaces {{ {} }}", + s.value() + ))); + opts.only_interfaces = true; + } Opt::With(val) => opts.with.extend(val), } } @@ -136,7 +145,7 @@ mod kw { syn::custom_keyword!(trappable_error_type); syn::custom_keyword!(world); syn::custom_keyword!(duplicate_if_necessary); - syn::custom_keyword!(only_interfaces); + syn::custom_keyword!(interfaces); syn::custom_keyword!(with); } @@ -148,7 +157,7 @@ enum Opt { Async(bool), TrappableErrorType(Vec), DuplicateIfNecessary(bool), - OnlyInterfaces(bool), + Interfaces(syn::LitStr), With(HashMap), } @@ -198,10 +207,10 @@ impl Parse for Opt { }) .collect(), )) - } else if l.peek(kw::only_interfaces) { - input.parse::()?; + } else if l.peek(kw::interfaces) { + input.parse::()?; input.parse::()?; - Ok(Opt::OnlyInterfaces(input.parse::()?.value)) + Ok(Opt::Interfaces(input.parse::()?)) } else if l.peek(kw::with) { input.parse::()?; input.parse::()?; diff --git a/crates/component-macro/tests/codegen.rs b/crates/component-macro/tests/codegen.rs index 3bcead04895a..ac39534022c0 100644 --- a/crates/component-macro/tests/codegen.rs +++ b/crates/component-macro/tests/codegen.rs @@ -21,13 +21,6 @@ macro_rules! gentest { duplicate_if_necessary: true, }); } - mod interfaces_only { - wasmtime::component::bindgen!({ - path: $path, - world: $name, - only_interfaces: true, - }); - } } // ... }; diff --git a/crates/wasmtime/src/component/mod.rs b/crates/wasmtime/src/component/mod.rs index 3dd7b740dd3a..21550adef897 100644 --- a/crates/wasmtime/src/component/mod.rs +++ b/crates/wasmtime/src/component/mod.rs @@ -292,11 +292,11 @@ pub(crate) use self::store::ComponentStoreData; /// interface::ErrorType: RustErrorType, /// }, /// -/// // Restrict the code generated to what's needed for the imported -/// // interfaces of the world file provided. This option is most useful -/// // in conjunction with the `with` option that permits remapping of -/// // interface names in generated code. -/// only_interfaces: true, +/// // Restrict the code generated to what's needed for the interface +/// // imports in the inlined WIT document fragment. +/// interfaces: " +/// import foo: package.foo; +/// ", /// /// // Remap interface names to module names, imported from elswhere. /// // Using this option will prevent any code from being generated diff --git a/tests/all/component_model/bindgen/results.rs b/tests/all/component_model/bindgen/results.rs index 19376a64a299..a8034175108c 100644 --- a/tests/all/component_model/bindgen/results.rs +++ b/tests/all/component_model/bindgen/results.rs @@ -639,15 +639,10 @@ mod with_remapping { mod interfaces { wasmtime::component::bindgen!({ - inline: " - default world result-playground { - import imports: interface { - empty-error: func(a: float64) -> result - } - - export empty-error: func(a: float64) -> result + interfaces: " + import imports: interface { + empty-error: func(a: float64) -> result }", - only_interfaces: true, }); }