use crate::prelude::*;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Builtin {
Timer,
Printer,
Transport,
}
impl Builtin {
pub fn from_string(str: impl AsRef<str>) -> Result<Self> {
match str.as_ref() {
"timer" => Ok(Builtin::Timer),
"printer" => Ok(Builtin::Printer),
"transport" => Ok(Builtin::Transport),
_ => Err(eyre::eyre!("Invalid builtin name")),
}
}
}
pub async fn new_builtin(
builtin: Builtin,
inputs: Inputs,
outputs: Outputs,
queries: Queries,
queryables: Queryables,
configuration: serde_yml::Value,
) -> Result<Box<dyn Node>> {
match builtin {
Builtin::Timer => Timer::new(inputs, outputs, queries, queryables, configuration)
.await
.wrap_err("Failed to await statically linked node")?,
Builtin::Printer => Printer::new(inputs, outputs, queries, queryables, configuration)
.await
.wrap_err("Failed to await statically linked node")?,
Builtin::Transport => Transport::new(inputs, outputs, queries, queryables, configuration)
.await
.wrap_err("Failed to await statically linked node")?,
}
}