pub use minicbor_serde::error::DecodeError;
pub use serde::Deserialize;
use serde::Serialize;
pub struct Directive(crate::wit::Directive);
impl Directive {
pub fn name(&self) -> &str {
&self.0.name
}
pub fn arguments<'de, T>(&'de self) -> Result<T, DecodeError>
where
T: Deserialize<'de>,
{
minicbor_serde::from_slice(&self.0.arguments)
}
}
impl From<crate::wit::Directive> for Directive {
fn from(value: crate::wit::Directive) -> Self {
Self(value)
}
}
pub struct FieldDefinition(crate::wit::FieldDefinition);
impl FieldDefinition {
pub fn name(&self) -> &str {
self.0.name.as_str()
}
pub fn type_name(&self) -> &str {
self.0.type_name.as_str()
}
}
impl From<crate::wit::FieldDefinition> for FieldDefinition {
fn from(value: crate::wit::FieldDefinition) -> Self {
Self(value)
}
}
pub struct FieldOutput(crate::wit::FieldOutput);
impl Default for FieldOutput {
fn default() -> Self {
Self::new()
}
}
impl FieldOutput {
pub fn new() -> Self {
Self(crate::wit::FieldOutput { outputs: Vec::new() })
}
pub fn with_capacity(capacity: usize) -> Self {
Self(crate::wit::FieldOutput {
outputs: Vec::with_capacity(capacity),
})
}
pub fn push_value<T>(&mut self, output: T)
where
T: Serialize,
{
let output =
minicbor_serde::to_vec(output).expect("serialization error is Infallible, so it should never happen");
self.0.outputs.push(Ok(output))
}
pub fn push_error(&mut self, error: crate::wit::Error) {
self.0.outputs.push(Err(error))
}
}
impl From<FieldOutput> for crate::wit::FieldOutput {
fn from(value: FieldOutput) -> Self {
value.0
}
}
pub struct FieldInputs(Vec<Vec<u8>>);
impl FieldInputs {
pub(crate) fn new(inputs: Vec<Vec<u8>>) -> Self {
Self(inputs)
}
pub fn deserialize<'de, T>(&'de self) -> Result<Vec<T>, Box<dyn std::error::Error>>
where
T: Deserialize<'de>,
{
self.0
.iter()
.map(|input| minicbor_serde::from_slice(input).map_err(|e| Box::new(e) as Box<dyn std::error::Error>))
.collect()
}
}