1pub mod solc;
8pub mod build;
9pub mod magic;
10pub mod schema;
11pub mod schema_check;
12pub mod output;
13pub mod validate;
14pub mod generate;
15
16use clap::{Parser, Subcommand};
17
18#[derive(Parser)]
19#[command(author, version, about, long_about = None)]
20struct Cli {
21 #[command(subcommand)]
22 meta: Meta,
23}
24
25#[derive(Subcommand)]
26pub enum Meta {
27 #[command(subcommand)]
28 Schema(schema::Schema),
29 Validate(validate::Validate),
30 SchemaCheck(schema_check::SchemaCheck),
31 #[command(subcommand)]
32 Magic(magic::Magic),
33 Build(build::Build),
34 #[command(subcommand)]
35 Solc(solc::Solc),
36 Generate(generate::Generate),
37}
38
39pub async fn dispatch(meta: Meta) -> anyhow::Result<()> {
40 match meta {
41 Meta::Build(build) => build::build(build),
42 Meta::Solc(solc) => solc::dispatch(solc),
43 Meta::Magic(magic) => magic::dispatch(magic),
44 Meta::Schema(schema) => schema::dispatch(schema),
45 Meta::Validate(validate) => validate::validate(validate),
46 Meta::SchemaCheck(c) => schema_check::schema_check(c).await,
47 Meta::Generate(generate) => generate::generate(generate),
48 }
49}
50
51pub async fn main() -> anyhow::Result<()> {
52 tracing::subscriber::set_global_default(tracing_subscriber::fmt::Subscriber::new())?;
53 let cli = Cli::parse();
54 dispatch(cli.meta).await
55}