@@ -24,9 +24,9 @@ use quote::{format_ident, quote};
2424use syn:: Ident ;
2525
2626use crate :: emit:: {
27- FnName , ResourceItemName , State , WitName , kebab_to_cons, kebab_to_exports_name, kebab_to_fn ,
28- kebab_to_getter , kebab_to_imports_name , kebab_to_namespace , kebab_to_type , kebab_to_var ,
29- split_wit_name,
27+ FnName , ResourceItemName , State , WitName , kebab_to_cons, kebab_to_exports_name,
28+ kebab_to_flags_const , kebab_to_fn , kebab_to_getter , kebab_to_imports_name , kebab_to_namespace ,
29+ kebab_to_type , kebab_to_var , split_wit_name,
3030} ;
3131use crate :: etypes:: {
3232 self , Component , Defined , ExternDecl , ExternDesc , Func , Handleable , ImportExport , Instance ,
@@ -409,21 +409,41 @@ fn emit_value_toplevel(s: &mut State, v: Option<u32>, id: Ident, vt: &Value) ->
409409 }
410410 }
411411 Value :: Flags ( ns) => {
412- let ( vs , toks ) = gather_needed_vars ( s , v , |_| {
413- let ns = ns
412+ if s . is_wasmtime_guest {
413+ let flags = ns
414414 . iter ( )
415415 . map ( |n| {
416416 let orig_name = n. name ;
417- let id = kebab_to_var ( orig_name) ;
418- quote ! { pub #id: bool }
417+ let const_name = kebab_to_flags_const ( orig_name) ;
418+ quote ! {
419+ #[ component( name = #orig_name) ]
420+ const #const_name;
421+ }
419422 } )
420423 . collect :: < Vec < _ > > ( ) ;
421- quote ! { #( #ns) , * }
422- } ) ;
423- let vs = emit_type_defn_var_list ( s, vs) ;
424- quote ! {
425- #[ derive( Debug , Clone , PartialEq ) ]
426- pub struct #id #vs { #toks }
424+ quote ! {
425+ :: wasmtime:: component:: flags! {
426+ #id {
427+ #( #flags) *
428+ }
429+ }
430+ }
431+ } else {
432+ let ( vs, toks) = gather_needed_vars ( s, v, |_| {
433+ let ns = ns
434+ . iter ( )
435+ . map ( |n| {
436+ let id = kebab_to_var ( n. name ) ;
437+ quote ! { pub #id: bool }
438+ } )
439+ . collect :: < Vec < _ > > ( ) ;
440+ quote ! { #( #ns) , * }
441+ } ) ;
442+ let vs = emit_type_defn_var_list ( s, vs) ;
443+ quote ! {
444+ #[ derive( Debug , Clone , PartialEq ) ]
445+ pub struct #id #vs { #toks }
446+ }
427447 }
428448 }
429449 Value :: Variant ( vcs) => {
0 commit comments