cdk_common/wallet/saga/
melt.rs1use cashu::BlindedMessage;
4use serde::{Deserialize, Serialize};
5
6use crate::{Amount, Error};
7
8#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "snake_case")]
11pub enum MeltSagaState {
12 ProofsReserved,
14 MeltRequested,
16 PaymentPending,
18}
19
20impl std::fmt::Display for MeltSagaState {
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 match self {
23 MeltSagaState::ProofsReserved => write!(f, "proofs_reserved"),
24 MeltSagaState::MeltRequested => write!(f, "melt_requested"),
25 MeltSagaState::PaymentPending => write!(f, "payment_pending"),
26 }
27 }
28}
29
30impl std::str::FromStr for MeltSagaState {
31 type Err = Error;
32 fn from_str(s: &str) -> Result<Self, Self::Err> {
33 match s {
34 "proofs_reserved" => Ok(MeltSagaState::ProofsReserved),
35 "melt_requested" => Ok(MeltSagaState::MeltRequested),
36 "payment_pending" => Ok(MeltSagaState::PaymentPending),
37 _ => Err(Error::InvalidOperationState),
38 }
39 }
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44pub struct MeltOperationData {
45 pub quote_id: String,
47 pub amount: Amount,
49 pub fee_reserve: Amount,
51 pub counter_start: Option<u32>,
53 pub counter_end: Option<u32>,
55 pub change_amount: Option<Amount>,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub change_blinded_messages: Option<Vec<BlindedMessage>>,
63}