cdk_payment_processor/proto/
mod.rs1use std::str::FromStr;
4
5use cdk_common::payment::{
6 CreateIncomingPaymentResponse, MakePaymentResponse as CdkMakePaymentResponse,
7};
8use cdk_common::{Bolt11Invoice, CurrencyUnit, MeltQuoteBolt11Request};
9use melt_options::Options;
10mod client;
11mod server;
12
13pub use client::PaymentProcessorClient;
14pub use server::PaymentProcessorServer;
15
16tonic::include_proto!("cdk_payment_processor");
17
18impl TryFrom<MakePaymentResponse> for CdkMakePaymentResponse {
19 type Error = crate::error::Error;
20 fn try_from(value: MakePaymentResponse) -> Result<Self, Self::Error> {
21 Ok(Self {
22 payment_lookup_id: value.payment_lookup_id.clone(),
23 payment_proof: value.payment_proof.clone(),
24 status: value.status().as_str_name().parse()?,
25 total_spent: value.total_spent.into(),
26 unit: value.unit.parse()?,
27 })
28 }
29}
30
31impl From<CdkMakePaymentResponse> for MakePaymentResponse {
32 fn from(value: CdkMakePaymentResponse) -> Self {
33 Self {
34 payment_lookup_id: value.payment_lookup_id.clone(),
35 payment_proof: value.payment_proof.clone(),
36 status: QuoteState::from(value.status).into(),
37 total_spent: value.total_spent.into(),
38 unit: value.unit.to_string(),
39 }
40 }
41}
42
43impl From<CreateIncomingPaymentResponse> for CreatePaymentResponse {
44 fn from(value: CreateIncomingPaymentResponse) -> Self {
45 Self {
46 request_lookup_id: value.request_lookup_id,
47 request: value.request.to_string(),
48 expiry: value.expiry,
49 }
50 }
51}
52
53impl TryFrom<CreatePaymentResponse> for CreateIncomingPaymentResponse {
54 type Error = crate::error::Error;
55
56 fn try_from(value: CreatePaymentResponse) -> Result<Self, Self::Error> {
57 Ok(Self {
58 request_lookup_id: value.request_lookup_id,
59 request: value.request,
60 expiry: value.expiry,
61 })
62 }
63}
64
65impl From<&MeltQuoteBolt11Request> for PaymentQuoteRequest {
66 fn from(value: &MeltQuoteBolt11Request) -> Self {
67 Self {
68 request: value.request.to_string(),
69 unit: value.unit.to_string(),
70 options: value.options.map(|o| o.into()),
71 }
72 }
73}
74
75impl From<cdk_common::payment::PaymentQuoteResponse> for PaymentQuoteResponse {
76 fn from(value: cdk_common::payment::PaymentQuoteResponse) -> Self {
77 Self {
78 request_lookup_id: value.request_lookup_id,
79 amount: value.amount.into(),
80 fee: value.fee.into(),
81 state: QuoteState::from(value.state).into(),
82 unit: value.unit.to_string(),
83 }
84 }
85}
86
87impl From<cdk_common::nut23::MeltOptions> for MeltOptions {
88 fn from(value: cdk_common::nut23::MeltOptions) -> Self {
89 Self {
90 options: Some(value.into()),
91 }
92 }
93}
94
95impl From<cdk_common::nut23::MeltOptions> for Options {
96 fn from(value: cdk_common::nut23::MeltOptions) -> Self {
97 match value {
98 cdk_common::MeltOptions::Mpp { mpp } => Self::Mpp(Mpp {
99 amount: mpp.amount.into(),
100 }),
101 cdk_common::MeltOptions::Amountless { amountless } => Self::Amountless(Amountless {
102 amount_msat: amountless.amount_msat.into(),
103 }),
104 }
105 }
106}
107
108impl From<MeltOptions> for cdk_common::nut23::MeltOptions {
109 fn from(value: MeltOptions) -> Self {
110 let options = value.options.expect("option defined");
111 match options {
112 Options::Mpp(mpp) => cdk_common::MeltOptions::new_mpp(mpp.amount),
113 Options::Amountless(amountless) => {
114 cdk_common::MeltOptions::new_amountless(amountless.amount_msat)
115 }
116 }
117 }
118}
119
120impl From<PaymentQuoteResponse> for cdk_common::payment::PaymentQuoteResponse {
121 fn from(value: PaymentQuoteResponse) -> Self {
122 Self {
123 request_lookup_id: value.request_lookup_id.clone(),
124 amount: value.amount.into(),
125 unit: CurrencyUnit::from_str(&value.unit).unwrap_or_default(),
126 fee: value.fee.into(),
127 state: value.state().into(),
128 }
129 }
130}
131
132impl From<QuoteState> for cdk_common::nut05::QuoteState {
133 fn from(value: QuoteState) -> Self {
134 match value {
135 QuoteState::Unpaid => Self::Unpaid,
136 QuoteState::Paid => Self::Paid,
137 QuoteState::Pending => Self::Pending,
138 QuoteState::Unknown => Self::Unknown,
139 QuoteState::Failed => Self::Failed,
140 QuoteState::Issued => Self::Unknown,
141 }
142 }
143}
144
145impl From<cdk_common::nut05::QuoteState> for QuoteState {
146 fn from(value: cdk_common::nut05::QuoteState) -> Self {
147 match value {
148 cdk_common::MeltQuoteState::Unpaid => Self::Unpaid,
149 cdk_common::MeltQuoteState::Paid => Self::Paid,
150 cdk_common::MeltQuoteState::Pending => Self::Pending,
151 cdk_common::MeltQuoteState::Unknown => Self::Unknown,
152 cdk_common::MeltQuoteState::Failed => Self::Failed,
153 }
154 }
155}
156
157impl From<cdk_common::nut23::QuoteState> for QuoteState {
158 fn from(value: cdk_common::nut23::QuoteState) -> Self {
159 match value {
160 cdk_common::MintQuoteState::Unpaid => Self::Unpaid,
161 cdk_common::MintQuoteState::Paid => Self::Paid,
162 cdk_common::MintQuoteState::Pending => Self::Pending,
163 cdk_common::MintQuoteState::Issued => Self::Issued,
164 }
165 }
166}
167
168impl From<cdk_common::mint::MeltQuote> for MeltQuote {
169 fn from(value: cdk_common::mint::MeltQuote) -> Self {
170 Self {
171 id: value.id.to_string(),
172 unit: value.unit.to_string(),
173 amount: value.amount.into(),
174 request: value.request,
175 fee_reserve: value.fee_reserve.into(),
176 state: QuoteState::from(value.state).into(),
177 expiry: value.expiry,
178 payment_preimage: value.payment_preimage,
179 request_lookup_id: value.request_lookup_id,
180 msat_to_pay: value.msat_to_pay.map(|a| a.into()),
181 created_time: value.created_time,
182 paid_time: value.paid_time,
183 }
184 }
185}
186
187impl TryFrom<MeltQuote> for cdk_common::mint::MeltQuote {
188 type Error = crate::error::Error;
189
190 fn try_from(value: MeltQuote) -> Result<Self, Self::Error> {
191 Ok(Self {
192 id: value
193 .id
194 .parse()
195 .map_err(|_| crate::error::Error::InvalidId)?,
196 unit: value.unit.parse()?,
197 amount: value.amount.into(),
198 request: value.request.clone(),
199 fee_reserve: value.fee_reserve.into(),
200 state: cdk_common::nut05::QuoteState::from(value.state()),
201 expiry: value.expiry,
202 payment_preimage: value.payment_preimage,
203 request_lookup_id: value.request_lookup_id,
204 msat_to_pay: value.msat_to_pay.map(|a| a.into()),
205 created_time: value.created_time,
206 paid_time: value.paid_time,
207 })
208 }
209}
210
211impl TryFrom<PaymentQuoteRequest> for MeltQuoteBolt11Request {
212 type Error = crate::error::Error;
213
214 fn try_from(value: PaymentQuoteRequest) -> Result<Self, Self::Error> {
215 Ok(Self {
216 request: Bolt11Invoice::from_str(&value.request)?,
217 unit: CurrencyUnit::from_str(&value.unit)?,
218 options: value.options.map(|o| o.into()),
219 })
220 }
221}