pub mod actions;
pub mod cli;
pub mod client;
pub mod config;
pub mod diagnostic;
pub mod model;
pub mod render;
pub(crate) mod util;
use crate::cli::{
AuthCmd, Cli, DataModelCmd, ProjectCmd, ResourceCmd, ResourceTypeCmd, TopLevel, VreCmd,
};
use crate::client::http::HttpDspClient;
use crate::config::Config;
use crate::diagnostic::Diagnostic;
pub fn run(cli: Cli) -> Result<(), Diagnostic> {
match cli.command {
TopLevel::Auth { cmd } => match cmd {
AuthCmd::Login(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::auth::login::run(&args, &cfg, &client, &mut *renderer)
}
AuthCmd::Status(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::auth::status::run(&args, &cfg, &mut *renderer)
}
AuthCmd::Logout(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::auth::logout::run(&args, &cfg, &mut *renderer)
}
AuthCmd::SetToken(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::auth::set_token::run(&cfg, &client, &mut *renderer)
}
AuthCmd::Token(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
actions::auth::token::run(&cfg)
}
},
TopLevel::Vre { cmd } => match cmd {
VreCmd::Project { cmd } => match cmd {
ProjectCmd::List(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::project::list(&args, &cfg, &client, &mut *renderer)
}
ProjectCmd::Describe(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::project::describe(&args, &cfg, &client, &mut *renderer)
}
ProjectCmd::Dump(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
let mut reporter = fmt.into_progress_reporter();
actions::vre::project::dump(
&args,
&cfg,
&client,
&mut *renderer,
&mut *reporter,
)
}
},
VreCmd::DataModel { cmd } => match cmd {
DataModelCmd::List(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::data_model::list(&args, &cfg, &client, &mut *renderer)
}
DataModelCmd::Describe(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::data_model::describe(&args, &cfg, &client, &mut *renderer)
}
DataModelCmd::Structure(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::data_model::structure(&args, &cfg, &client, &mut *renderer)
}
},
VreCmd::ResourceType { cmd } => match cmd {
ResourceTypeCmd::List(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::resource_type::list(&args, &cfg, &client, &mut *renderer)
}
ResourceTypeCmd::Describe(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::resource_type::describe(&args, &cfg, &client, &mut *renderer)
}
},
VreCmd::Resource { cmd } => match cmd {
ResourceCmd::List(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::resource::list(&args, &cfg, &client, &mut *renderer)
}
ResourceCmd::Describe(args) => {
let cfg = Config::resolve(args.server.as_deref())?;
let client = HttpDspClient::new()?;
let fmt = args.format.resolve();
let opts = args.format.table_options(fmt)?;
let mut renderer = fmt.into_renderer_with_options(opts);
actions::vre::resource::describe(&args, &cfg, &client, &mut *renderer)
}
},
},
TopLevel::Docs(args) => actions::docs::run(&args),
}
}