#[cfg(not(target_arch = "wasm32"))]
use cddl::validator::cbor;
mod message;
pub use message::MESSAGE_SCHEMA;
pub mod error {
use thiserror::Error;
#[derive(Error, Debug)]
pub enum SchemaError {
#[error("invalid message schema: {0}")]
InvalidSchema(String),
#[error("invalid CBOR format")]
InvalidCBOR,
}
}
#[cfg(not(target_arch = "wasm32"))]
pub fn validate_schema(cddl_schema: &str, bytes: Vec<u8>) -> Result<(), error::SchemaError> {
match cddl::validate_cbor_from_slice(cddl_schema, &bytes) {
Err(cbor::Error::Validation(err)) => {
let err_str = err
.iter()
.map(|fe| format!("{}: \"{}\"", fe.cbor_location, fe.reason))
.collect::<Vec<String>>()
.join(", ");
Err(error::SchemaError::InvalidSchema(err_str))
}
Err(cbor::Error::CBORParsing(_err)) => Err(error::SchemaError::InvalidCBOR),
Err(cbor::Error::CDDLParsing(err)) => {
panic!("Parsing CDDL error: {}", err);
}
_ => Ok(()),
}
}