diff --git a/crates/schema_generator/README.md b/crates/schema_generator/README.md new file mode 100644 index 0000000000..f8ef5bc234 --- /dev/null +++ b/crates/schema_generator/README.md @@ -0,0 +1,12 @@ +# Zed Schema Generator + +Prints various Zed schemas to stdout. + +## Usage + +```sh +cargo run -p schema_generator -- --help + +cargo run -p schema_generator -- theme +cargo run -p schema_generator -- icon_theme +``` diff --git a/crates/schema_generator/src/main.rs b/crates/schema_generator/src/main.rs index 2109dbd807..a7e406a1a9 100644 --- a/crates/schema_generator/src/main.rs +++ b/crates/schema_generator/src/main.rs @@ -1,26 +1,36 @@ use anyhow::Result; -use clap::Parser; +use clap::{Parser, ValueEnum}; use schemars::schema_for; use theme::{IconThemeFamilyContent, ThemeFamilyContent}; #[derive(Parser, Debug)] -struct Args {} +pub struct Args { + #[arg(value_enum)] + pub schema_type: SchemaType, +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] +#[clap(rename_all = "snake_case")] +pub enum SchemaType { + Theme, + IconTheme, +} fn main() -> Result<()> { env_logger::init(); - let _args = Args::parse(); + let args = Args::parse(); - let theme_family_schema = schema_for!(ThemeFamilyContent); - println!("Theme Schema:"); - println!("{}", serde_json::to_string_pretty(&theme_family_schema)?); - - let icon_theme_family_schema = schema_for!(IconThemeFamilyContent); - println!("Icon Theme Schema:"); - println!( - "{}", - serde_json::to_string_pretty(&icon_theme_family_schema)? - ); + match args.schema_type { + SchemaType::Theme => { + let schema = schema_for!(ThemeFamilyContent); + println!("{}", serde_json::to_string_pretty(&schema)?); + } + SchemaType::IconTheme => { + let schema = schema_for!(IconThemeFamilyContent); + println!("{}", serde_json::to_string_pretty(&schema)?); + } + } Ok(()) }