pub use crate::{
cmd::{publish::Publish, version::Version},
Config,
};
use anyhow::Result;
use ccli::{
clap::{self, Parser},
App,
};
use std::path::PathBuf;
mod publish;
mod version;
#[derive(Debug, Parser, Clone)]
pub enum Command {
Version(Version),
Publish(Publish),
}
#[derive(Debug, Parser, Clone)]
pub struct Conta {
#[clap(short, long)]
manifest: Option<PathBuf>,
#[clap(short, long)]
config: Option<PathBuf>,
#[clap(subcommand)]
command: Command,
}
impl Conta {
pub fn manifest(&self) -> PathBuf {
if let Some(p) = &self.manifest {
p.into()
} else {
PathBuf::from("Cargo.toml")
}
}
pub fn config(&self) -> Result<Config> {
Config::from_optional(self.config.as_deref())
}
}
impl App for Conta {
fn verbose(&self) -> u8 {
0
}
fn run(&self) -> Result<()> {
let manifest = self.manifest();
match &self.command {
Command::Version(version) => version.run(&manifest),
Command::Publish(publish) => publish.run(&manifest, &self.config()?.ignore),
}
}
}