#[cfg(feature = "knuffel")] use knuffel::{Decode, DecodeScalar}; pub trait BuildFromRef { fn ref_to(query: impl Into) -> Self; } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Schema { #[cfg_attr(feature = "knuffel", knuffel(child))] pub document: Document, } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Document { #[cfg_attr(feature = "knuffel", knuffel(child))] pub info: Info, #[cfg_attr(feature = "knuffel", knuffel(children(name = "node")))] pub nodes: Vec, } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Info { #[cfg_attr(feature = "knuffel", knuffel(children(name = "title")))] pub title: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "description")))] pub description: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "author")))] pub authors: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "contributor")))] pub contributors: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "link")))] pub links: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "license")))] pub licenses: Vec, #[cfg_attr(feature = "knuffel", knuffel(child))] pub published: Option, #[cfg_attr(feature = "knuffel", knuffel(child))] pub modified: Option, } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct TextValue { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub text: String, #[cfg_attr(feature = "knuffel", knuffel(property))] pub lang: Option, } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Person { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub name: String, #[cfg_attr(feature = "knuffel", knuffel(property))] pub orcid: Option, #[cfg_attr(feature = "knuffel", knuffel(children(name = "link")))] pub links: Vec, } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Link { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub iri: String, #[cfg_attr(feature = "knuffel", knuffel(property))] pub rel: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub lang: Option, } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct License { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub name: String, #[cfg_attr(feature = "knuffel", knuffel(property))] pub spdx: Option, #[cfg_attr(feature = "knuffel", knuffel(children(name = "link")))] pub link: Vec, } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Date { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub date: String, #[cfg_attr(feature = "knuffel", knuffel(property))] pub time: Option, } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Node { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub name: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub id: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub description: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub ref_: Option, #[cfg_attr(feature = "knuffel", knuffel(child, unwrap(argument)))] pub min: Option, #[cfg_attr(feature = "knuffel", knuffel(child, unwrap(argument)))] pub max: Option, #[cfg_attr(feature = "knuffel", knuffel(children(name = "prop")))] pub props: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "value")))] pub values: Vec, #[cfg_attr(feature = "knuffel", knuffel(children(name = "children")))] pub children: Vec, } impl BuildFromRef for Node { fn ref_to(query: impl Into) -> Self { Self { ref_: Some(query.into()), ..Self::default() } } } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Prop { #[cfg_attr(feature = "knuffel", knuffel(argument))] pub key: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub id: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub description: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub ref_: Option, #[cfg_attr(feature = "knuffel", knuffel(child))] pub required: bool, #[cfg_attr(feature = "knuffel", knuffel(children))] pub validations: Vec, } impl BuildFromRef for Prop { fn ref_to(query: impl Into) -> Self { Self { ref_: Some(query.into()), ..Self::default() } } } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Value { #[cfg_attr(feature = "knuffel", knuffel(property))] pub id: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub description: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub ref_: Option, #[cfg_attr(feature = "knuffel", knuffel(child, unwrap(argument)))] pub min: Option, #[cfg_attr(feature = "knuffel", knuffel(child, unwrap(argument)))] pub max: Option, #[cfg_attr(feature = "knuffel", knuffel(children))] pub validations: Vec, } impl BuildFromRef for Value { fn ref_to(query: impl Into) -> Self { Self { ref_: Some(query.into()), ..Self::default() } } } #[derive(Debug, PartialEq, Eq, Default)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub struct Children { #[cfg_attr(feature = "knuffel", knuffel(property))] pub id: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub description: Option, #[cfg_attr(feature = "knuffel", knuffel(property))] pub ref_: Option, #[cfg_attr(feature = "knuffel", knuffel(children(name = "node")))] pub nodes: Vec, } impl BuildFromRef for Children { fn ref_to(query: impl Into) -> Self { Self { ref_: Some(query.into()), ..Self::default() } } } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(Decode))] pub enum Validation { Type(#[cfg_attr(feature = "knuffel", knuffel(argument))] String), Enum(#[cfg_attr(feature = "knuffel", knuffel(arguments))] Vec), Pattern(#[cfg_attr(feature = "knuffel", knuffel(argument))] String), Format(#[cfg_attr(feature = "knuffel", knuffel(arguments))] Vec), } #[derive(Debug, PartialEq, Eq)] #[cfg_attr(feature = "knuffel", derive(DecodeScalar))] pub enum Format { DateTime, Date, Time, Duration, Decimal, Currency, Country2, Country3, CountrySubdivision, Email, IdnEmail, Hostname, IdnHostname, Ipv4, Ipv6, Url, UrlReference, Irl, IrlReference, UrlTemplate, Uuid, Regex, Base64, KdlQuery, } mod schema_schema; pub use schema_schema::SCHEMA_SCHEMA;