Skip to main content

webots_proto_schema/
lib.rs

1pub mod error;
2#[macro_use]
3pub mod macros;
4pub mod types;
5mod versions;
6
7mod proto {
8    pub mod ast {
9        pub use webots_proto_ast::proto::ast::*;
10    }
11
12    pub mod span {
13        pub use webots_proto_ast::proto::span::*;
14    }
15
16    pub type ProtoResult<T> = Result<T, ProtoError>;
17
18    #[derive(Debug, Clone, PartialEq, Eq)]
19    pub enum ProtoError {
20        ParseError(String),
21        SerializationError(String),
22    }
23
24    pub mod builtin_nodes;
25    pub(crate) mod conversion;
26    pub mod schema;
27    pub mod validation;
28}
29
30pub use error::{Error, Result};
31pub use proto::validation::{
32    Diagnostic, DiagnosticSet, NodeSchema, SchemaField, Severity, ValidationContext,
33};
34pub use versions::r2025a;
35
36pub fn validate(proto: &proto::ast::Proto) -> DiagnosticSet {
37    proto::validation::validate_document(proto)
38}
39
40pub fn validate_runtime_semantics(node: &proto::ast::AstNode) -> DiagnosticSet {
41    proto::validation::validate_runtime_semantics(node)
42}
43
44pub fn ast_to_r2025a_node(node: &proto::ast::AstNode) -> proto::ProtoResult<r2025a::Node> {
45    proto::conversion::ast_to_r2025a_node(node)
46}
47
48pub fn r2025a_node_to_ast(node: &r2025a::Node) -> proto::ProtoResult<proto::ast::AstNode> {
49    proto::conversion::r2025a_node_to_ast(node)
50}