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 }
83 }
84}
85
86impl From<cdk_common::nut23::MeltOptions> for MeltOptions {
87 fn from(value: cdk_common::nut23::MeltOptions) -> Self {
88 Self {
89 options: Some(value.into()),
90 }
91 }
92}
93
94impl From<cdk_common::nut23::MeltOptions> for Options {
95 fn from(value: cdk_common::nut23::MeltOptions) -> Self {
96 match value {
97 cdk_common::MeltOptions::Mpp { mpp } => Self::Mpp(Mpp {
98 amount: mpp.amount.into(),
99 }),
100 cdk_common::MeltOptions::Amountless { amountless } => Self::Amountless(Amountless {
101 amount_msat: amountless.amount_msat.into(),
102 }),
103 }
104 }
105}
106
107impl From<MeltOptions> for cdk_common::nut23::MeltOptions {
108 fn from(value: MeltOptions) -> Self {
109 let options = value.options.expect("option defined");
110 match options {
111 Options::Mpp(mpp) => cdk_common::MeltOptions::new_mpp(mpp.amount),
112 Options::Amountless(amountless) => {
113 cdk_common::MeltOptions::new_amountless(amountless.amount_msat)
114 }
115 }
116 }
117}
118
119impl From<PaymentQuoteResponse> for cdk_common::payment::PaymentQuoteResponse {
120 fn from(value: PaymentQuoteResponse) -> Self {
121 Self {
122 request_lookup_id: value.request_lookup_id.clone(),
123 amount: value.amount.into(),
124 fee: value.fee.into(),
125 state: value.state().into(),
126 }
127 }
128}
129
130impl From<QuoteState> for cdk_common::nut05::QuoteState {
131 fn from(value: QuoteState) -> Self {
132 match value {
133 QuoteState::Unpaid => Self::Unpaid,
134 QuoteState::Paid => Self::Paid,
135 QuoteState::Pending => Self::Pending,
136 QuoteState::Unknown => Self::Unknown,
137 QuoteState::Failed => Self::Failed,
138 QuoteState::Issued => Self::Unknown,
139 }
140 }
141}
142
143impl From<cdk_common::nut05::QuoteState> for QuoteState {
144 fn from(value: cdk_common::nut05::QuoteState) -> Self {
145 match value {
146 cdk_common::MeltQuoteState::Unpaid => Self::Unpaid,
147 cdk_common::MeltQuoteState::Paid => Self::Paid,
148 cdk_common::MeltQuoteState::Pending => Self::Pending,
149 cdk_common::MeltQuoteState::Unknown => Self::Unknown,
150 cdk_common::MeltQuoteState::Failed => Self::Failed,
151 }
152 }
153}
154
155impl From<cdk_common::nut23::QuoteState> for QuoteState {
156 fn from(value: cdk_common::nut23::QuoteState) -> Self {
157 match value {
158 cdk_common::MintQuoteState::Unpaid => Self::Unpaid,
159 cdk_common::MintQuoteState::Paid => Self::Paid,
160 cdk_common::MintQuoteState::Pending => Self::Pending,
161 cdk_common::MintQuoteState::Issued => Self::Issued,
162 }
163 }
164}
165
166impl From<cdk_common::mint::MeltQuote> for MeltQuote {
167 fn from(value: cdk_common::mint::MeltQuote) -> Self {
168 Self {
169 id: value.id.to_string(),
170 unit: value.unit.to_string(),
171 amount: value.amount.into(),
172 request: value.request,
173 fee_reserve: value.fee_reserve.into(),
174 state: QuoteState::from(value.state).into(),
175 expiry: value.expiry,
176 payment_preimage: value.payment_preimage,
177 request_lookup_id: value.request_lookup_id,
178 msat_to_pay: value.msat_to_pay.map(|a| a.into()),
179 created_time: value.created_time,
180 paid_time: value.paid_time,
181 }
182 }
183}
184
185impl TryFrom<MeltQuote> for cdk_common::mint::MeltQuote {
186 type Error = crate::error::Error;
187
188 fn try_from(value: MeltQuote) -> Result<Self, Self::Error> {
189 Ok(Self {
190 id: value
191 .id
192 .parse()
193 .map_err(|_| crate::error::Error::InvalidId)?,
194 unit: value.unit.parse()?,
195 amount: value.amount.into(),
196 request: value.request.clone(),
197 fee_reserve: value.fee_reserve.into(),
198 state: cdk_common::nut05::QuoteState::from(value.state()),
199 expiry: value.expiry,
200 payment_preimage: value.payment_preimage,
201 request_lookup_id: value.request_lookup_id,
202 msat_to_pay: value.msat_to_pay.map(|a| a.into()),
203 created_time: value.created_time,
204 paid_time: value.paid_time,
205 })
206 }
207}
208
209impl TryFrom<PaymentQuoteRequest> for MeltQuoteBolt11Request {
210 type Error = crate::error::Error;
211
212 fn try_from(value: PaymentQuoteRequest) -> Result<Self, Self::Error> {
213 Ok(Self {
214 request: Bolt11Invoice::from_str(&value.request)?,
215 unit: CurrencyUnit::from_str(&value.unit)?,
216 options: value.options.map(|o| o.into()),
217 })
218 }
219}