busbar_sf_agentscript/
lib.rs1#![recursion_limit = "512"]
2
3pub mod ast;
26pub mod error;
27pub mod lexer;
28pub mod parser;
29pub mod serializer;
30pub mod validation;
31
32#[cfg(feature = "wasm")]
33pub mod wasm;
34
35#[cfg(feature = "graph")]
36pub mod graph;
37
38pub use ast::{AgentFile, Expr, Reference, Spanned, Type};
40pub use error::{AgentScriptError, ErrorReporter};
41pub use parser::{parse, parse_with_structured_errors};
42pub use serializer::serialize;
43pub use validation::validate_ast;
44
45pub fn parse_source(source: &str) -> Result<AgentFile, Vec<String>> {
47 let (result, errors) = parser::parse_with_errors(source);
48 if !errors.is_empty() {
49 return Err(errors);
50 }
51 result.ok_or_else(|| vec!["Unknown parse error".to_string()])
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57 use chumsky::prelude::*;
58
59 #[test]
60 fn test_parse_minimal() {
61 let source = r#"
62config:
63 agent_name: "Test"
64"#;
65 let result = parse_source(source);
66 assert!(result.is_ok());
67 }
68
69 #[test]
70 fn test_lexer_integration() {
71 let source = r#"@variables.user_id != """#;
72 let tokens = lexer::lexer().parse(source);
73 assert!(tokens.has_output());
74 }
75}