use crate::config::Config;
pub fn config_schema_json() -> String {
let schema = schemars::schema_for!(Config);
let mut json = serde_json::to_string_pretty(&schema).expect("schema serialises");
json.push('\n');
json
}
#[cfg(test)]
mod tests {
use super::config_schema_json;
const SCHEMA_PATH: &str = concat!(
env!("CARGO_MANIFEST_DIR"),
"/../../docs/src/config.schema.json"
);
#[test]
fn checked_in_schema_is_current() {
let generated = config_schema_json();
if std::env::var_os("UPDATE_SCHEMA").is_some() {
std::fs::write(SCHEMA_PATH, &generated).expect("write schema");
return;
}
let on_disk = std::fs::read_to_string(SCHEMA_PATH).unwrap_or_default();
assert_eq!(
generated, on_disk,
"docs/src/config.schema.json is stale; regenerate with \
`UPDATE_SCHEMA=1 cargo test -p suno-core --features schema checked_in_schema_is_current`"
);
}
#[test]
fn schema_numeric_ranges_match_the_resolver() {
let schema: serde_json::Value = serde_json::from_str(&config_schema_json()).unwrap();
for tier in ["Defaults", "AccountConfig", "SourceConfig"] {
let props = &schema["$defs"][tier]["properties"];
assert_eq!(props["animated_cover_quality"]["maximum"], 100, "{tier}");
assert_eq!(
props["animated_cover_compression_level"]["maximum"], 4,
"{tier}"
);
for u32_knob in [
"concurrency",
"retries",
"min_newest",
"animated_cover_max_fps",
"animated_cover_max_width",
] {
assert_eq!(
props[u32_knob]["maximum"],
u64::from(u32::MAX),
"{tier}.{u32_knob}"
);
}
}
}
}