Skip to main content

rain_metadata/cli/
mod.rs

1//! Represents a [mod@clap] based CLI app module
2//!
3//! struct, enums that use `clap` derive macro to produce CLI commands, argument
4//! and options with underlying functions to handle each scenario.
5//! enabled by default or by `cli` feature if default features i off.
6
7pub 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}