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