flarrow_builtins/
enumeration.rs

1use crate::prelude::*;
2
3/// Enumeration of built-in nodes.
4#[derive(Debug, Clone, PartialEq, Eq, Hash)]
5pub enum Builtin {
6    Timer,
7    Printer,
8    Transport,
9}
10
11impl Builtin {
12    /// Creates a new instance of a built-in node from a string.
13    pub fn from_string(str: impl AsRef<str>) -> Result<Self> {
14        match str.as_ref() {
15            "timer" => Ok(Builtin::Timer),
16            "printer" => Ok(Builtin::Printer),
17            "transport" => Ok(Builtin::Transport),
18            _ => Err(eyre::eyre!("Invalid builtin name")),
19        }
20    }
21}
22
23/// Creates a new instance of a StaticallyLinked RuntimeNode from a Builtin enum.
24pub async fn new_builtin(
25    builtin: Builtin,
26    inputs: Inputs,
27    outputs: Outputs,
28    queries: Queries,
29    queryables: Queryables,
30    configuration: serde_yml::Value,
31) -> Result<Box<dyn Node>> {
32    match builtin {
33        Builtin::Timer => Timer::new(inputs, outputs, queries, queryables, configuration)
34            .await
35            .wrap_err("Failed to await statically linked node")?,
36        Builtin::Printer => Printer::new(inputs, outputs, queries, queryables, configuration)
37            .await
38            .wrap_err("Failed to await statically linked node")?,
39        Builtin::Transport => Transport::new(inputs, outputs, queries, queryables, configuration)
40            .await
41            .wrap_err("Failed to await statically linked node")?,
42    }
43}