webots-proto-schema 0.2.0

Versioned schemas, typed nodes, and validation for Webots PROTO.
Documentation
pub mod error;
#[macro_use]
pub mod macros;
pub mod types;
mod versions;

mod proto {
    pub mod ast {
        pub use webots_proto_ast::proto::ast::*;
    }

    pub mod span {
        pub use webots_proto_ast::proto::span::*;
    }

    pub type ProtoResult<T> = Result<T, ProtoError>;

    #[derive(Debug, Clone, PartialEq, Eq)]
    pub enum ProtoError {
        ParseError(String),
        SerializationError(String),
    }

    pub mod builtin_nodes;
    pub(crate) mod conversion;
    pub mod schema;
    pub mod validation;
}

pub use error::{Error, Result};
pub use proto::validation::{
    Diagnostic, DiagnosticSet, NodeSchema, SchemaField, Severity, ValidationContext,
};
pub use versions::r2025a;

pub fn validate(proto: &proto::ast::Proto) -> DiagnosticSet {
    proto::validation::validate_document(proto)
}

pub fn validate_runtime_semantics(node: &proto::ast::AstNode) -> DiagnosticSet {
    proto::validation::validate_runtime_semantics(node)
}

pub fn ast_to_r2025a_node(node: &proto::ast::AstNode) -> proto::ProtoResult<r2025a::Node> {
    proto::conversion::ast_to_r2025a_node(node)
}

pub fn r2025a_node_to_ast(node: &r2025a::Node) -> proto::ProtoResult<proto::ast::AstNode> {
    proto::conversion::r2025a_node_to_ast(node)
}