sdf_parser_host/
host.rs

1use anyhow::{Context, Result};
2use sdf_metadata::wit::dataflow::DataflowDefinition;
3use tracing::debug;
4
5use sdf_metadata::wit::package_interface::PackageDefinition;
6
7use crate::bindings::sdf::parser::yaml_parser::Host as ParserHost;
8/// Host based parser
9pub struct HostParser {}
10
11impl Default for HostParser {
12    fn default() -> Self {
13        Self::new()
14    }
15}
16
17impl HostParser {
18    pub fn new() -> Self {
19        Self {}
20    }
21
22    pub fn parse_dataflow(&mut self, config_string: &str) -> Result<DataflowDefinition> {
23        debug!("parsing dataflow");
24
25        let config = sdf_parser_df::parse(config_string)?;
26        debug!("parsed dataflow");
27        config
28            .try_into()
29            .with_context(|| "failed to convert dataflow into WIT dataflow")
30    }
31
32    pub fn parse_package(&mut self, config_string: &str) -> Result<PackageDefinition> {
33        debug!("parsing package");
34
35        let config = sdf_parser_package::parse_package(config_string)?;
36        debug!("parsed dataflow");
37        config
38            .try_into()
39            .with_context(|| "failed to convert package into WIT package")
40    }
41}
42
43impl ParserHost for HostParser {
44    fn parse_dataflow(&mut self, config_string: String) -> Result<DataflowDefinition, String> {
45        self.parse_dataflow(&config_string)
46            .map_err(|err| err.to_string())
47    }
48
49    fn parse_package(&mut self, config_string: String) -> Result<PackageDefinition, String> {
50        self.parse_package(&config_string)
51            .map_err(|err| err.to_string())
52    }
53}