(v: &ComponentConst<'_>)
| 7 | pub use wasmtime::component::*; |
| 8 | |
| 9 | pub fn val(v: &ComponentConst<'_>) -> Result<Val> { |
| 10 | Ok(match v { |
| 11 | ComponentConst::Bool(b) => Val::Bool(*b), |
| 12 | ComponentConst::U8(b) => Val::U8(b.0), |
| 13 | ComponentConst::S8(b) => Val::S8(b.0), |
| 14 | ComponentConst::U16(b) => Val::U16(b.0), |
| 15 | ComponentConst::S16(b) => Val::S16(b.0), |
| 16 | ComponentConst::U32(b) => Val::U32(b.0), |
| 17 | ComponentConst::S32(b) => Val::S32(b.0), |
| 18 | ComponentConst::U64(b) => Val::U64(b.0), |
| 19 | ComponentConst::S64(b) => Val::S64(b.0), |
| 20 | ComponentConst::F32(b) => Val::Float32(f32::from_bits(b.0)), |
| 21 | ComponentConst::F64(b) => Val::Float64(f64::from_bits(b.0)), |
| 22 | ComponentConst::Char(b) => Val::Char(*b), |
| 23 | ComponentConst::String(s) => Val::String(s.to_string()), |
| 24 | ComponentConst::List(vals) => { |
| 25 | let vals = vals.iter().map(|v| val(v)).collect::<Result<Vec<_>>>()?; |
| 26 | Val::List(vals) |
| 27 | } |
| 28 | ComponentConst::Record(vals) => { |
| 29 | let mut fields = Vec::new(); |
| 30 | for (name, v) in vals { |
| 31 | fields.push((name.to_string(), val(v)?)); |
| 32 | } |
| 33 | Val::Record(fields) |
| 34 | } |
| 35 | ComponentConst::Tuple(vals) => { |
| 36 | Val::Tuple(vals.iter().map(|v| val(v)).collect::<Result<Vec<_>>>()?) |
| 37 | } |
| 38 | ComponentConst::Enum(name) => Val::Enum(name.to_string()), |
| 39 | ComponentConst::Variant { case, payload } => { |
| 40 | let payload = payload_val(payload.as_deref())?; |
| 41 | Val::Variant(case.to_string(), payload) |
| 42 | } |
| 43 | ComponentConst::Option(v) => Val::Option(match v { |
| 44 | Some(v) => Some(Box::new(val(v)?)), |
| 45 | None => None, |
| 46 | }), |
| 47 | ComponentConst::Result(v) => Val::Result(match v { |
| 48 | Ok(v) => Ok(payload_val(v.as_deref())?), |
| 49 | Err(v) => Err(payload_val(v.as_deref())?), |
| 50 | }), |
| 51 | ComponentConst::Flags(v) => Val::Flags(v.iter().map(|s| s.to_string()).collect()), |
| 52 | }) |
| 53 | } |
| 54 | |
| 55 | fn payload_val(v: Option<&ComponentConst<'_>>) -> Result<Option<Box<Val>>> { |
| 56 | match v { |
no test coverage detected