mod subcommand;
use carli::prelude::app::*;
use std::cell::RefCell;
use std::io::{stderr, stdin, stdout};
#[derive(clap::Parser)]
#[clap(
name = "multiple",
about = "An example application that offers multiple subcommands."
)]
pub struct Application {
#[clap(skip = RefCell::new(stderr().into()))]
error: RefCell<Stream>,
#[clap(skip = RefCell::new(stdin().into()))]
input: RefCell<Stream>,
#[clap(short, long, global = true, default_value = "world")]
name: String,
#[clap(skip = RefCell::new(stdout().into()))]
output: RefCell<Stream>,
#[clap(subcommand)]
subcommand: subcommand::Subcommand,
}
impl Application {
pub fn name(&self) -> &str {
&self.name
}
}
impl Main for Application {
fn subcommand(&self) -> &dyn Execute<Self> {
&self.subcommand
}
}
impl Shared for Application {
fn error(&self) -> std::cell::RefMut<Stream> {
self.error.borrow_mut()
}
fn input(&self) -> std::cell::RefMut<Stream> {
self.input.borrow_mut()
}
fn output(&self) -> std::cell::RefMut<Stream> {
self.output.borrow_mut()
}
}