use club_kdl::KdlDeserialize;
#[derive(Debug, Default, KdlDeserialize)]
#[kdl(document)]
pub struct RawSchema {
#[kdl(child)]
pub protocol: Option<RawProtocol>,
#[kdl(children, name = "struct")]
pub structs: Vec<RawStruct>,
#[kdl(children, name = "enum")]
pub enums: Vec<RawEnum>,
#[kdl(children, name = "record")]
pub records: Vec<RawRecord>,
#[kdl(children, name = "relation")]
pub relations: Vec<RawRelation>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "protocol")]
pub struct RawProtocol {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub version: String,
#[kdl(child, unwrap_arg)]
pub namespace: Option<String>,
#[kdl(child, unwrap_arg)]
pub description: Option<String>,
#[kdl(children, name = "channel")]
pub channels: Vec<RawChannel>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "channel")]
pub struct RawChannel {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub from: String,
#[kdl(property)]
pub lifetime: String,
#[kdl(property)]
pub backend: Option<String>,
#[kdl(property)]
pub channel_id: Option<u64>,
#[kdl(children, name = "request")]
pub requests: Vec<RawRequest>,
#[kdl(children, name = "event")]
pub events: Vec<RawEvent>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "request")]
pub struct RawRequest {
#[kdl(argument)]
pub name: String,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
#[kdl(child)]
pub returns: Option<RawMessage>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "event")]
pub struct RawEvent {
#[kdl(argument)]
pub name: String,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
}
#[derive(Debug, KdlDeserialize)]
pub struct RawMessage {
#[kdl(argument)]
pub name: String,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "field")]
pub struct RawField {
#[kdl(argument)]
pub name: String,
#[kdl(property, rename = "type")]
pub type_str: String,
#[kdl(property, default)]
pub optional: bool,
#[kdl(property, default)]
pub flexible: bool,
#[kdl(property)]
pub default: Option<String>,
#[kdl(property)]
pub description: Option<String>,
#[kdl(property)]
pub min: Option<i64>,
#[kdl(property)]
pub max: Option<i64>,
#[kdl(property)]
pub min_length: Option<u64>,
#[kdl(property)]
pub max_length: Option<u64>,
#[kdl(property)]
pub pattern: Option<String>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "id")]
pub struct RawId {
#[kdl(property)]
pub strategy: Option<String>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "record")]
pub struct RawRecord {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub description: Option<String>,
#[kdl(child)]
pub id: Option<RawId>,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "relation")]
pub struct RawRelation {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub description: Option<String>,
#[kdl(property)]
pub from: String,
#[kdl(property)]
pub to: String,
#[kdl(property, default)]
pub unique: bool,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "struct")]
pub struct RawStruct {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub description: Option<String>,
#[kdl(children, name = "field")]
pub fields: Vec<RawField>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "enum")]
pub struct RawEnum {
#[kdl(argument)]
pub name: String,
#[kdl(property)]
pub description: Option<String>,
#[kdl(children, name = "variant")]
pub variants: Vec<RawVariant>,
}
#[derive(Debug, KdlDeserialize)]
#[kdl(name = "variant")]
pub struct RawVariant {
#[kdl(argument)]
pub name: String,
}