Skip to main content

spl_forge/
cli.rs

1use std::path::PathBuf;
2
3use clap::Parser;
4
5#[derive(Parser, Debug)]
6#[command(version, about, long_about = None, disable_help_subcommand = true)]
7pub struct Args {
8    #[command(subcommand)]
9    pub command: Command,
10}
11
12#[derive(clap::Subcommand, Debug)]
13pub enum Command {
14    Help,
15    Config(ConfigArgs),
16    Create(CreateArgs),
17    Wallet(WalletArgs),
18}
19
20#[derive(Parser, Debug)]
21pub struct ConfigArgs {
22    #[command(subcommand)]
23    pub command: ConfigCommand,
24}
25
26#[derive(clap::Subcommand, Debug)]
27pub enum ConfigCommand {
28    Get,
29    Reset,
30    Set {
31        #[arg(value_name = "NETWORK")]
32        network: Option<String>,
33
34        #[arg(long)]
35        url: Option<String>,
36
37        #[arg(long)]
38        keypair: Option<PathBuf>,
39
40        #[arg(long)]
41        commitment: Option<String>,
42    }
43}
44
45#[derive(Parser, Debug)]
46pub struct CreateArgs {
47    #[command(subcommand)]
48    pub command: CreateCommand,
49}
50
51#[derive(Parser, Debug)]
52pub struct WalletArgs {
53    #[command(subcommand)]
54    pub command: WalletCommand,
55}
56
57#[derive(clap::Subcommand, Debug)]
58pub enum WalletCommand {
59    Address,
60    Balance {
61        #[arg(long)]
62        address: Option<String>,
63    },
64    Status,
65    Airdrop {
66        amount: f64,
67    },
68}
69
70#[derive(clap::Subcommand, Debug)]
71pub enum CreateCommand {
72    Mint {
73        #[arg(long)]
74        mint_authority: String,
75
76        #[arg(long)]
77        freeze_authority: Option<String>,
78
79        #[arg(long)]
80        decimals: u8,
81
82        #[arg(long)]
83        initial_supply: u64,
84    },
85    Metadata {
86        #[arg(long)]
87        mint_address: String,
88
89        #[arg(long)]
90        name: String,
91
92        #[arg(long)]
93        symbol: String,
94
95        #[arg(long)]
96        uri: String,
97
98        #[arg(long)]
99        immutable: bool,
100    },
101    Token {
102        #[arg(long)]
103        name: String,
104
105        #[arg(long)]
106        symbol: String,
107
108        #[arg(long)]
109        decimals: u8,
110
111        #[arg(long)]
112        initial_supply: u64,
113
114        #[arg(long)]
115        uri: String,
116
117        #[arg(long)]
118        freeze_authority: Option<String>,
119
120        #[arg(long)]
121        immutable: bool,
122    },
123    Nft {
124        #[arg(long)]
125        name: String,
126
127        #[arg(long)]
128        symbol: String,
129
130        #[arg(long)]
131        uri: String,
132
133        #[arg(long)]
134        immutable: bool,
135
136        #[arg(long)]
137        freeze_authority: Option<String>,
138
139        #[arg(long)]
140        collection_mint: Option<String>,
141    },
142    Market {
143        #[arg(long)]
144        base_mint: String,
145
146        #[arg(long)]
147        quote_mint: String,
148    },
149    Pool {
150        #[arg(long)]
151        market_id: String,
152
153        #[arg(long)]
154        base_amount: String,
155
156        #[arg(long)]
157        quote_amount: String,
158    },
159    Launch {
160        #[arg(long)]
161        name: String,
162
163        #[arg(long)]
164        symbol: String,
165
166        #[arg(long)]
167        image_path: String,
168
169        #[arg(long)]
170        description: Option<String>,
171
172        #[arg(long)]
173        decimals: u8,
174
175        #[arg(long)]
176        initial_supply: u64,
177
178        #[arg(long)]
179        mint_authority: Option<String>,
180
181        #[arg(long)]
182        freeze_authority: Option<String>,
183
184        #[arg(long)]
185        initial_lp_base: u64,
186
187        #[arg(long)]
188        initial_lp_quote: u64,
189
190        #[arg(long)]
191        immutable: bool,
192
193        #[arg(long)]
194        burn_lp: bool,
195
196        #[arg(long)]
197        lock_lp_duration: u64,
198    }
199}