dg_fast_farmer 2.0.2

A lite farmer for the Chia Blockchain.
Documentation
pub mod commands;
mod prompts;
pub mod utils;

use clap::{Parser, Subcommand};
use std::io::Error;
use std::str::FromStr;

#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Cli {
    #[command(subcommand)]
    pub action: Option<Action>,
    #[arg(short, long, value_name = "FILE")]
    pub config: Option<String>,
}

#[derive(Default, Debug, Copy, Clone, Subcommand)]
pub enum RunMode {
    Cli,
    #[default]
    Tui,
}
impl FromStr for RunMode {
    type Err = Error;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        Ok(match s.to_ascii_lowercase().as_str() {
            "cli" => RunMode::Cli,
            "tui" => RunMode::Tui,
            _ => RunMode::default(),
        })
    }
}

#[derive(Debug, Subcommand)]
pub enum Action {
    Run {
        #[arg(short = 'm', long)]
        mode: Option<RunMode>,
    },
    Init {
        #[arg(short = 'f', long)]
        fullnode_ws_host: Option<String>,
        #[arg(short = 'p', long)]
        fullnode_ws_port: Option<u16>,
        #[arg(short = 'r', long)]
        fullnode_rpc_host: Option<String>,
        #[arg(short = 'o', long)]
        fullnode_rpc_port: Option<u16>,
        #[arg(short = 's', long)]
        fullnode_ssl: Option<String>,
        #[arg(short = 'n', long)]
        network: Option<String>,
        #[arg(short = 'a', long)]
        payout_address: Option<String>,
        #[arg(short = 'd', long = "plot-directory")]
        plot_directories: Option<Vec<String>>,
        #[arg(short = 'm', long)]
        mnemonic_file: Option<String>,
        #[arg(short = 'l', long)]
        launcher_id: Option<String>,
    },
    Update {},
    UpdatePoolInfo {
        #[arg(short = 'l', long)]
        launcher_id: Option<String>,
    },
    GetLoginLink {
        #[arg(short = 'l', long)]
        launcher_id: String,
    },
    UpdatePayoutAddress {
        #[arg(short = 'a', long)]
        address: String,
    },
    JoinPool {
        #[arg(short = 'u', long)]
        pool_url: String,
        #[arg(short = 'm', long)]
        mnemonic_file: Option<String>,
        #[arg(short = 'i', long)]
        launcher_id: Option<String>,
        #[arg(short = 'f', long)]
        fee: Option<u64>,
    },
}
impl Default for Action {
    fn default() -> Self {
        Action::Run {
            mode: Some(RunMode::default()),
        }
    }
}