tpack-core 0.1.0

Core wire codec, schema AST, validation, and native traits for TPACK
Documentation
use alloc::boxed::Box;

use crate::{Error, Result, Schema, TpackValue, TypeDescriptor};

use super::FromTpackValue;

pub(super) fn bytes_schema() -> Schema {
    Schema::new(TypeDescriptor::Bytes { max_len: None })
}

pub(super) fn deserialize_via_from_value<'de, T>(value: TpackValue<'de>) -> Result<T>
where
    T: FromTpackValue<'de>,
{
    <T as FromTpackValue<'de>>::from_value(value)
}

pub(super) fn list_schema(element: Schema) -> Schema {
    Schema::new(TypeDescriptor::List {
        max_count: None,
        element: Box::new(element.root),
    })
}

pub(super) fn optional_schema(element: Schema) -> Schema {
    Schema::new(TypeDescriptor::Optional(Box::new(element.root)))
}

pub(super) fn string_schema() -> Schema {
    Schema::new(TypeDescriptor::String { max_len: None })
}

pub(super) fn type_mismatch(expected: &'static str) -> Error {
    Error::type_mismatch(expected)
}