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;
8pub 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}