1use anyhow::Result;
2use clap::{Parser, ValueEnum};
3use schemars::schema_for;
4use settings::ProjectSettingsContent;
5use theme::{IconThemeFamilyContent, ThemeFamilyContent};
6
7#[derive(Parser, Debug)]
8pub struct Args {
9 #[arg(value_enum)]
10 pub schema_type: SchemaType,
11}
12
13#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
14#[clap(rename_all = "snake_case")]
15pub enum SchemaType {
16 Theme,
17 IconTheme,
18 Project,
19}
20
21fn main() -> Result<()> {
22 env_logger::init();
23
24 let args = Args::parse();
25
26 match args.schema_type {
27 SchemaType::Theme => {
28 let schema = schema_for!(ThemeFamilyContent);
29 println!("{}", serde_json::to_string_pretty(&schema)?);
30 }
31 SchemaType::IconTheme => {
32 let schema = schema_for!(IconThemeFamilyContent);
33 println!("{}", serde_json::to_string_pretty(&schema)?);
34 }
35 SchemaType::Project => {
36 let schema = schema_for!(ProjectSettingsContent);
37 println!("{}", serde_json::to_string_pretty(&schema)?);
38 }
39 }
40
41 Ok(())
42}