sim_lib_agent_runner_core/
grammar.rs1use sim_kernel::Result;
2use sim_shape::{Shape, shape_json_schema};
3
4pub fn shape_to_grammar(shape: &dyn Shape) -> Result<String> {
9 shape_json_schema(shape)
10}
11
12#[cfg(test)]
13mod tests {
14 use super::shape_to_grammar;
15 use sim_kernel::Symbol;
16 use sim_shape::{ExprKind, ExprKindShape, FieldShape, FieldSpec, ListShape};
17 use std::sync::Arc;
18
19 #[test]
20 fn lowers_non_trivial_object_shape() {
21 let grammar = shape_to_grammar(&FieldShape::anonymous(vec![
22 FieldSpec::required(
23 Symbol::new("name"),
24 Arc::new(ExprKindShape::new(ExprKind::String)),
25 ),
26 FieldSpec::required(
27 Symbol::new("versions"),
28 Arc::new(ListShape::new(vec![
29 Arc::new(ExprKindShape::new(ExprKind::String)),
30 Arc::new(ExprKindShape::new(ExprKind::String)),
31 ])),
32 ),
33 ]))
34 .unwrap();
35
36 assert!(grammar.contains(r#""type":"object""#));
37 assert!(grammar.contains(r#""name":{"type":"string"}"#));
38 assert!(grammar.contains(r#""versions":{"type":"array""#));
39 assert!(grammar.contains(r#""additionalProperties":false"#));
40 }
41}