main.rs

 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}