MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / print_rust_enum

Method print_rust_enum

crates/wit-bindgen/src/lib.rs:2045–2146  ·  view source on GitHub ↗
(
        &mut self,
        id: TypeId,
        cases: impl IntoIterator<Item = (String, Option<String>, &'b Docs, Option<&'b Type>)> + Clone,
        docs: &Docs,
        derive_component: &str,
   

Source from the content-addressed store, hash-verified

2043 }
2044
2045 fn print_rust_enum<'b>(
2046 &mut self,
2047 id: TypeId,
2048 cases: impl IntoIterator<Item = (String, Option<String>, &'b Docs, Option<&'b Type>)> + Clone,
2049 docs: &Docs,
2050 derive_component: &str,
2051 ) where
2052 Self: Sized,
2053 {
2054 let info = self.info(id);
2055 let wt = self.generator.wasmtime_path();
2056
2057 // We use a BTree set to make sure we don't have any duplicates and we have a stable order
2058 let additional_derives: BTreeSet<String> = self
2059 .generator
2060 .opts
2061 .additional_derive_attributes
2062 .iter()
2063 .cloned()
2064 .collect();
2065
2066 for (name, mode) in self.modes_of(id) {
2067 let name = to_rust_upper_camel_case(&name);
2068
2069 let mut derives = additional_derives.clone();
2070
2071 self.rustdoc(docs);
2072 let lt = self.lifetime_for(&info, mode);
2073 uwriteln!(self.src, "#[derive({wt}::component::ComponentType)]");
2074 if lt.is_none() {
2075 uwriteln!(self.src, "#[derive({wt}::component::Lift)]");
2076 }
2077 uwriteln!(self.src, "#[derive({wt}::component::Lower)]");
2078 self.push_str(&format!("#[component({derive_component})]\n"));
2079 if let Some(path) = &self.generator.opts.wasmtime_crate {
2080 uwriteln!(self.src, "#[component(wasmtime_crate = {path})]\n");
2081 }
2082 if info.is_copy() {
2083 derives.extend(["Copy", "Clone"].into_iter().map(|s| s.to_string()));
2084 } else if info.is_clone() {
2085 derives.insert("Clone".to_string());
2086 }
2087
2088 if !derives.is_empty() {
2089 self.push_str("#[derive(");
2090 self.push_str(&derives.into_iter().collect::<Vec<_>>().join(", "));
2091 self.push_str(")]\n")
2092 }
2093
2094 self.push_str(&format!("pub enum {name}"));
2095 self.print_generics(lt);
2096 self.push_str("{\n");
2097 for (case_name, component_name, docs, payload) in cases.clone() {
2098 self.rustdoc(docs);
2099 if let Some(n) = component_name {
2100 self.push_str(&format!("#[component(name = \"{n}\")] "));
2101 }
2102 self.push_str(&case_name);

Callers 1

type_variantMethod · 0.80

Calls 15

to_rust_upper_camel_caseFunction · 0.85
infoMethod · 0.80
wasmtime_pathMethod · 0.80
collectMethod · 0.80
modes_ofMethod · 0.80
rustdocMethod · 0.80
lifetime_forMethod · 0.80
is_copyMethod · 0.80
is_cloneMethod · 0.80
print_genericsMethod · 0.80
print_tyMethod · 0.80
print_rust_enum_debugMethod · 0.80

Tested by

no test coverage detected