use std::any::Any;
use solana_program::pubkey::Pubkey;
use clap::{Parser, Subcommand};
use common::init::{Matche};
use crate::CONFIG_FILE;
#[derive(Parser)]
#[clap(name = "aaa", author, version, about, long_about = None)]
#[clap(propagate_version = true)]
pub struct Cli {
#[clap(long, short, value_parser, global = true, takes_value = true,
default_value_t = {
if let Some(ref config_file) = * CONFIG_FILE {
config_file.to_string()
} else {
String::new()
}
}
)]
pub config_file: String,
#[clap(long, short, value_parser, global = true, takes_value = true)]
pub owner: Option<String>,
#[clap(subcommand)]
pub command: MineCli,
}
impl Matche for Cli {
fn as_any(&self) -> &dyn Any {
self
}
fn get_config_file(&self) -> &str {
self.config_file.as_str()
}
fn get_owner(&self) -> &str {
let s = self.owner.as_ref();
if s.is_some() {
s.unwrap().as_str()
} else {
""
}
}
}
#[derive(Subcommand)]
pub enum MineCli {
Quarry {
#[clap(subcommand)]
command: QuarryCommands,
},
Rewarder {
#[clap(subcommand)]
command: RewarderCommands,
},
}
#[derive(Subcommand)]
pub enum QuarryCommands {
New {
rewarder: Pubkey,
mint: Pubkey,
famine_ts: u64,
share: u64,
},
List,
Info {
rewarder: Pubkey,
mint: Pubkey,
},
UpdateShare {
rewarder: Pubkey,
mint: Pubkey,
share: u64,
},
SetFamine {
rewarder: Pubkey,
mint: Pubkey,
ts: u64,
}
}
#[derive(Subcommand)]
pub enum RewarderCommands {
New {
wrapper: Pubkey,
annual_rate: u64,
},
List,
Info {
rewarder: Pubkey,
},
SetAnnualRate {
rewarder: Pubkey,
rate: u64,
},
SyncQuarryRewards {
rewarder: Pubkey,
mint: String,
},
}