fedimint_mint_client/
cli.rs1use std::{ffi, iter};
2
3use anyhow::bail;
4use clap::Parser;
5use futures::StreamExt;
6use serde::Serialize;
7
8use crate::{MintClientModule, OOBNotes, ReissueExternalNotesState};
9
10#[derive(Parser, Serialize)]
11enum Opts {
12 Reissue { notes: OOBNotes },
14}
15
16pub(crate) async fn handle_cli_command(
17 mint: &MintClientModule,
18 args: &[ffi::OsString],
19) -> anyhow::Result<serde_json::Value> {
20 let opts = Opts::parse_from(iter::once(&ffi::OsString::from("mint")).chain(args.iter()));
21
22 match opts {
23 Opts::Reissue { notes } => {
24 let amount = notes.total_amount();
25
26 let operation_id = mint.reissue_external_notes(notes, ()).await?;
27
28 let mut updates = mint
29 .subscribe_reissue_external_notes(operation_id)
30 .await
31 .unwrap()
32 .into_stream();
33
34 while let Some(update) = updates.next().await {
35 if let ReissueExternalNotesState::Failed(e) = update {
36 bail!("Reissue failed: {e}");
37 }
38 }
39
40 Ok(serde_json::to_value(amount).expect("JSON serialization failed"))
41 }
42 }
43}