nifty_cli/commands/
approve.rs1use nifty_asset::{
2 instructions::{Approve, ApproveInstructionArgs},
3 types::{DelegateInput, DelegateRole},
4};
5
6use super::*;
7
8pub struct ApproveArgs {
9 pub keypair_path: Option<PathBuf>,
10 pub rpc_url: Option<String>,
11 pub asset: Pubkey,
12 pub delegate: Pubkey,
13 pub role: Vec<String>,
14}
15
16pub fn handle_approve(args: ApproveArgs) -> Result<()> {
17 let config = CliConfig::new(args.keypair_path, args.rpc_url)?;
18
19 let owner_sk = config.keypair;
20
21 let owner = owner_sk.pubkey();
22 let asset = args.asset;
23 let delegate = args.delegate;
24
25 let roles = args
26 .role
27 .iter()
28 .map(|role| match role.to_lowercase().as_str() {
29 "burn" => DelegateRole::Burn,
30 "lock" => DelegateRole::Lock,
31 "transfer" => DelegateRole::Transfer,
32 _ => panic!("Invalid role: {}", role),
33 })
34 .collect();
35
36 let args = ApproveInstructionArgs {
37 delegate_input: DelegateInput::Some { roles },
38 };
39
40 let ix = Approve {
41 asset,
42 owner,
43 delegate,
44 }
45 .instruction(args);
46
47 let sig = send_and_confirm_tx(&config.client, &[&owner_sk], &[ix])?;
48
49 println!("Setting {delegate} as a delegate on asset {asset} in tx: {sig}");
50
51 Ok(())
52}