pub mod ast;
pub mod asyncapi;
pub mod ecel;
pub mod jsonptr;
use ast::EtlDocument;
use asyncapi::AsyncApiRegistry;
use std::path::Path;
pub fn parse_document(yaml_str: &str) -> Result<EtlDocument, String> {
let doc: EtlDocument =
serde_yaml::from_str(yaml_str).map_err(|e| format!("YAML parse error: {}", e))?;
Ok(doc)
}
pub fn parse_document_from_file(path: &Path) -> Result<EtlDocument, String> {
let content =
std::fs::read_to_string(path).map_err(|e| format!("cannot read file: {}", e))?;
if content.starts_with('\u{feff}') {
return Err("E-102: document contains a byte-order mark (BOM)".to_string());
}
parse_document(&content)
}
pub fn load_asyncapi_imports(
doc: &EtlDocument,
base_dir: &Path,
) -> Result<AsyncApiRegistry, String> {
let mut registry = AsyncApiRegistry::new();
for (alias, location) in &doc.asyncapi_imports {
registry.load(alias, location, base_dir)?;
}
Ok(registry)
}