etdl-parser 0.1.0

ETDL document parser, ECEL expression parser, and AsyncAPI reference resolution
Documentation
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)
}