use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuartoSchema {
pub version: String,
pub roots: Roots,
pub defs: BTreeMap<String, SchemaNode>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Roots {
pub frontmatter: String,
pub project: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cell_knitr: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cell_jupyter: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "t", rename_all = "lowercase")]
pub enum SchemaNode {
Any,
String,
Number,
Boolean,
Null,
Enum {
values: Vec<serde_json::Value>,
},
Array {
#[serde(default, skip_serializing_if = "Option::is_none")]
items: Option<Box<SchemaNode>>,
},
Object {
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
properties: BTreeMap<String, SchemaNode>,
#[serde(default, skip_serializing_if = "is_false")]
closed: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pattern: Vec<PatternProp>,
},
AnyOf {
of: Vec<SchemaNode>,
},
AllOf {
of: Vec<SchemaNode>,
},
Ref {
id: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatternProp {
pub re: String,
pub schema: Box<SchemaNode>,
}
#[allow(clippy::trivially_copy_pass_by_ref)]
fn is_false(b: &bool) -> bool {
!*b
}