use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
fn default_sample_records() -> usize {
100
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct CatalogSpec {
pub url: String,
#[serde(default = "default_sample_records")]
pub sample_records: usize,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_minimal_block_with_defaults() {
let spec: CatalogSpec = serde_yaml::from_str("url: sqlite:./cat.db").unwrap();
assert_eq!(spec.url, "sqlite:./cat.db");
assert_eq!(spec.sample_records, 100);
}
#[test]
fn rejects_unknown_fields() {
let err = serde_yaml::from_str::<CatalogSpec>("url: memory\nnope: 1").unwrap_err();
assert!(err.to_string().contains("nope"));
}
#[test]
fn schema_generates() {
let schema = schemars::schema_for!(CatalogSpec);
let v = serde_json::to_value(&schema).unwrap();
assert!(v["properties"]["url"].is_object());
}
}