Skip to main content

breez_sdk_spark/common/
models.rs

1use serde::{Deserialize, Serialize};
2use thiserror::Error;
3
4#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
5#[macros::derive_from(breez_sdk_common::network::BitcoinNetwork)]
6#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
7pub enum BitcoinNetwork {
8    /// Mainnet
9    Bitcoin,
10    Testnet3,
11    Testnet4,
12    Signet,
13    Regtest,
14}
15
16#[derive(Clone, Debug, Error)]
17#[macros::derive_from(breez_sdk_common::input::ParseError)]
18pub enum ParseError {
19    #[error("empty input")]
20    EmptyInput,
21    #[error("Bip-21 error: {0}")]
22    Bip21Error(Bip21Error),
23    #[error("invalid input")]
24    InvalidInput,
25    #[error("Lnurl error: {0}")]
26    LnurlError(LnurlError),
27    #[error("Service connectivity error: {0}")]
28    ServiceConnectivity(ServiceConnectivityError),
29    #[error("Invalid external input parser: {0}")]
30    InvalidExternalInputParser(String),
31}
32
33#[derive(Clone, Debug, Error)]
34#[macros::derive_from(breez_sdk_common::input::Bip21Error)]
35pub enum Bip21Error {
36    #[error("bip21 contains invalid address")]
37    InvalidAddress,
38    #[error("bip21 contains invalid amount")]
39    InvalidAmount,
40    #[error("bip21 contains invalid parameter value for '{0}'")]
41    InvalidParameter(String),
42    #[error("bip21 parameter missing equals character")]
43    MissingEquals,
44    #[error("bip21 contains parameter '{0}' multiple times")]
45    MultipleParams(String),
46    #[error("bip21 contains unknown required parameter '{0}'")]
47    UnknownRequiredParameter(String),
48    #[error("bip21 does not contain any payment methods")]
49    NoPaymentMethods,
50}
51
52#[derive(Clone, Debug, Error)]
53#[macros::derive_from(breez_sdk_common::lnurl::error::LnurlError)]
54pub enum LnurlError {
55    #[error("lnurl missing k1 parameter")]
56    MissingK1,
57    #[error("lnurl contains invalid k1 parameter")]
58    InvalidK1,
59    #[error("lnurl contains unsupported action")]
60    UnsupportedAction,
61    #[error("lnurl missing domain")]
62    MissingDomain,
63    #[error("error calling lnurl endpoint: {0}")]
64    ServiceConnectivity(#[from] ServiceConnectivityError),
65    #[error("endpoint error: {0}")]
66    EndpointError(String),
67    #[error("lnurl has http scheme without onion domain")]
68    HttpSchemeWithoutOnionDomain,
69    #[error("lnurl has https scheme with onion domain")]
70    HttpsSchemeWithOnionDomain,
71    #[error("lnurl error: {0}")]
72    General(String),
73    #[error("lnurl has unknown scheme")]
74    UnknownScheme,
75    #[error("lnurl has invalid uri: {0}")]
76    InvalidUri(String),
77    #[error("lnurl has invalid invoice: {0}")]
78    InvalidInvoice(String),
79    #[error("lnurl has invalid response: {0}")]
80    InvalidResponse(String),
81}
82
83#[derive(Clone, Debug, Error)]
84#[macros::derive_from(breez_sdk_common::error::ServiceConnectivityError)]
85#[macros::derive_into(breez_sdk_common::error::ServiceConnectivityError)]
86#[cfg_attr(feature = "uniffi", derive(uniffi::Error))]
87pub enum ServiceConnectivityError {
88    #[error("Builder error: {0}")]
89    Builder(String),
90    #[error("Redirect error: {0}")]
91    Redirect(String),
92    #[error("Status error: {status} - {body}")]
93    Status { status: u16, body: String },
94    #[error("Timeout error: {0}")]
95    Timeout(String),
96    #[error("Request error: {0}")]
97    Request(String),
98    #[error("Connect error: {0}")]
99    Connect(String),
100    #[error("Body error: {0}")]
101    Body(String),
102    #[error("Decode error: {0}")]
103    Decode(String),
104    #[error("Json error: {0}")]
105    Json(String),
106    #[error("Other error: {0}")]
107    Other(String),
108}
109
110#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
111#[macros::derive_from(breez_sdk_common::input::Amount)]
112#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
113pub enum Amount {
114    Bitcoin {
115        amount_msat: u64,
116    },
117    /// An amount of currency specified using ISO 4712.
118    Currency {
119        /// The currency that the amount is denominated in.
120        iso4217_code: String,
121        /// The amount in the currency unit adjusted by the ISO 4712 exponent (e.g., USD cents).
122        fractional_amount: u64,
123    },
124}
125
126#[derive(Clone, Debug, Default, Deserialize, Serialize)]
127#[macros::derive_from(breez_sdk_common::input::Bip21Details)]
128#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
129pub struct Bip21Details {
130    pub amount_sat: Option<u64>,
131    pub asset_id: Option<String>,
132    pub uri: String,
133    pub extras: Vec<Bip21Extra>,
134    pub label: Option<String>,
135    pub message: Option<String>,
136    pub payment_methods: Vec<InputType>,
137}
138
139#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
140#[macros::derive_from(breez_sdk_common::input::Bip21Extra)]
141#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
142pub struct Bip21Extra {
143    pub key: String,
144    pub value: String,
145}
146
147#[derive(Clone, Debug, Deserialize, Serialize)]
148#[macros::derive_from(breez_sdk_common::input::BitcoinAddressDetails)]
149#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
150pub struct BitcoinAddressDetails {
151    pub address: String,
152    pub network: BitcoinNetwork,
153    pub source: PaymentRequestSource,
154}
155
156#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
157#[macros::derive_from(breez_sdk_common::input::Bolt11Invoice)]
158#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
159pub struct Bolt11Invoice {
160    pub bolt11: String,
161    pub source: PaymentRequestSource,
162}
163
164#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
165#[macros::derive_from(breez_sdk_common::input::Bolt11RouteHint)]
166#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
167pub struct Bolt11RouteHint {
168    pub hops: Vec<Bolt11RouteHintHop>,
169}
170
171#[derive(Clone, Default, Debug, PartialEq, Eq, Serialize, Deserialize)]
172#[macros::derive_from(breez_sdk_common::input::Bolt11RouteHintHop)]
173#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
174pub struct Bolt11RouteHintHop {
175    /// The `node_id` of the non-target end of the route
176    pub src_node_id: String,
177    /// The `short_channel_id` of this channel
178    pub short_channel_id: String,
179    /// The fees which must be paid to use this channel
180    pub fees_base_msat: u32,
181    pub fees_proportional_millionths: u32,
182
183    /// The difference in CLTV values between this node and the next node.
184    pub cltv_expiry_delta: u16,
185    /// The minimum value, in msat, which must be relayed to the next hop.
186    pub htlc_minimum_msat: Option<u64>,
187    /// The maximum value in msat available for routing with a single HTLC.
188    pub htlc_maximum_msat: Option<u64>,
189}
190
191#[derive(Clone, Debug, Deserialize, Serialize)]
192#[macros::derive_from(breez_sdk_common::input::Bolt12Invoice)]
193#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
194pub struct Bolt12Invoice {
195    pub invoice: String,
196    pub source: PaymentRequestSource,
197}
198
199#[derive(Clone, Debug, Deserialize, Serialize)]
200#[macros::derive_from(breez_sdk_common::input::Bolt12InvoiceRequestDetails)]
201#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
202pub struct Bolt12InvoiceRequestDetails {
203    // TODO: Fill fields
204}
205
206#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
207#[macros::derive_from(breez_sdk_common::input::Bolt12OfferBlindedPath)]
208#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
209pub struct Bolt12OfferBlindedPath {
210    pub blinded_hops: Vec<String>,
211}
212
213#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
214#[macros::derive_from(breez_sdk_common::input::Bolt11InvoiceDetails)]
215#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
216pub struct Bolt11InvoiceDetails {
217    pub amount_msat: Option<u64>,
218    pub description: Option<String>,
219    pub description_hash: Option<String>,
220    pub expiry: u64,
221    pub invoice: Bolt11Invoice,
222    pub min_final_cltv_expiry_delta: u64,
223    pub network: BitcoinNetwork,
224    pub payee_pubkey: String,
225    pub payment_hash: String,
226    pub payment_secret: String,
227    pub routing_hints: Vec<Bolt11RouteHint>,
228    pub timestamp: u64,
229}
230
231#[derive(Clone, Debug, Deserialize, Serialize)]
232#[macros::derive_from(breez_sdk_common::input::Bolt12InvoiceDetails)]
233#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
234pub struct Bolt12InvoiceDetails {
235    pub amount_msat: u64,
236    pub invoice: Bolt12Invoice,
237}
238
239#[derive(Clone, Debug, Deserialize, Serialize)]
240#[macros::derive_from(breez_sdk_common::input::Bolt12Offer)]
241#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
242pub struct Bolt12Offer {
243    pub offer: String,
244    pub source: PaymentRequestSource,
245}
246
247#[derive(Clone, Debug, Deserialize, Serialize)]
248#[macros::derive_from(breez_sdk_common::input::Bolt12OfferDetails)]
249#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
250pub struct Bolt12OfferDetails {
251    pub absolute_expiry: Option<u64>,
252    pub chains: Vec<String>,
253    pub description: Option<String>,
254    pub issuer: Option<String>,
255    pub min_amount: Option<Amount>,
256    pub offer: Bolt12Offer,
257    pub paths: Vec<Bolt12OfferBlindedPath>,
258    pub signing_pubkey: Option<String>,
259}
260
261#[derive(Clone, Debug, Deserialize, Serialize)]
262#[macros::derive_from(breez_sdk_common::input::InputType)]
263#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
264pub enum InputType {
265    BitcoinAddress(BitcoinAddressDetails),
266    Bolt11Invoice(Bolt11InvoiceDetails),
267    Bolt12Invoice(Bolt12InvoiceDetails),
268    Bolt12Offer(Bolt12OfferDetails),
269    LightningAddress(LightningAddressDetails),
270    LnurlPay(LnurlPayRequestDetails),
271    SilentPaymentAddress(SilentPaymentAddressDetails),
272    LnurlAuth(LnurlAuthRequestDetails),
273    Url(String),
274    Bip21(Bip21Details),
275    Bolt12InvoiceRequest(Bolt12InvoiceRequestDetails),
276    LnurlWithdraw(LnurlWithdrawRequestDetails),
277    SparkAddress(SparkAddressDetails),
278    SparkInvoice(SparkInvoiceDetails),
279    CrossChainAddress(CrossChainAddressDetails),
280}
281
282#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
283#[macros::derive_from(breez_sdk_common::input::CrossChainAddressFamily)]
284#[macros::derive_into(breez_sdk_common::input::CrossChainAddressFamily)]
285#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
286#[serde(rename_all = "snake_case")]
287pub enum CrossChainAddressFamily {
288    Evm,
289    Solana,
290    Tron,
291}
292
293#[derive(Clone, Debug, Deserialize, Serialize)]
294#[macros::derive_from(breez_sdk_common::input::CrossChainAddressDetails)]
295#[macros::derive_into(breez_sdk_common::input::CrossChainAddressDetails)]
296#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
297pub struct CrossChainAddressDetails {
298    pub address: String,
299    pub address_family: CrossChainAddressFamily,
300    pub contract_address: Option<String>,
301    pub chain_id: Option<u64>,
302    pub amount: Option<u128>,
303}
304
305#[derive(Clone, Debug, Deserialize, Serialize)]
306#[macros::derive_from(breez_sdk_common::lnurl::pay::LnurlPayRequestDetails)]
307#[macros::derive_into(breez_sdk_common::lnurl::pay::LnurlPayRequestDetails)]
308#[serde(rename_all = "camelCase")]
309#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
310pub struct LnurlPayRequestDetails {
311    pub callback: String,
312    /// The minimum amount, in millisats, that this LNURL-pay endpoint accepts
313    pub min_sendable: u64,
314    /// The maximum amount, in millisats, that this LNURL-pay endpoint accepts
315    pub max_sendable: u64,
316    /// As per LUD-06, `metadata` is a raw string (e.g. a json representation of the inner map).
317    /// Use `metadata_vec()` to get the parsed items.
318    #[serde(rename(deserialize = "metadata"))]
319    pub metadata_str: String,
320    /// The comment length accepted by this endpoint
321    ///
322    /// See <https://github.com/lnurl/luds/blob/luds/12.md>
323    #[serde(default)]
324    pub comment_allowed: u16,
325
326    /// Indicates the domain of the LNURL-pay service, to be shown to the user when asking for
327    /// payment input, as per LUD-06 spec.
328    ///
329    /// Note: this is not the domain of the callback, but the domain of the LNURL-pay endpoint.
330    #[serde(skip)]
331    pub domain: String,
332
333    #[serde(skip)]
334    pub url: String,
335
336    /// Optional lightning address if that was used to resolve the lnurl.
337    #[serde(skip)]
338    pub address: Option<String>,
339
340    /// Value indicating whether the recipient supports Nostr Zaps through NIP-57.
341    ///
342    /// See <https://github.com/nostr-protocol/nips/blob/master/57.md>
343    pub allows_nostr: Option<bool>,
344    /// Optional recipient's lnurl provider's Nostr pubkey for NIP-57. If it exists it should be a
345    /// valid BIP 340 public key in hex.
346    ///
347    /// See <https://github.com/nostr-protocol/nips/blob/master/57.md>
348    /// See <https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki>
349    pub nostr_pubkey: Option<String>,
350}
351
352/// Wrapped in a [`InputType::LnurlAuth`], this is the result of [`parse`](breez_sdk_common::input::parse) when given a LNURL-auth endpoint.
353///
354/// It represents the endpoint's parameters for the LNURL workflow.
355///
356/// See <https://github.com/lnurl/luds/blob/luds/04.md>
357#[derive(Clone, Debug, Deserialize, Serialize)]
358#[macros::derive_from(breez_sdk_common::lnurl::auth::LnurlAuthRequestDetails)]
359#[macros::derive_into(breez_sdk_common::lnurl::auth::LnurlAuthRequestDetails)]
360#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
361pub struct LnurlAuthRequestDetails {
362    /// Hex encoded 32 bytes of challenge
363    pub k1: String,
364
365    /// When available, one of: register, login, link, auth
366    pub action: Option<String>,
367
368    /// Indicates the domain of the LNURL-auth service, to be shown to the user when asking for
369    /// auth confirmation, as per LUD-04 spec.
370    #[serde(skip_serializing, skip_deserializing)]
371    pub domain: String,
372
373    /// Indicates the URL of the LNURL-auth service, including the query arguments. This will be
374    /// extended with the signed challenge and the linking key, then called in the second step of the workflow.
375    #[serde(skip_serializing, skip_deserializing)]
376    pub url: String,
377}
378
379/// LNURL error details
380#[derive(Clone, Debug, Deserialize, Serialize)]
381#[macros::derive_from(breez_sdk_common::lnurl::LnurlErrorDetails)]
382#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
383pub struct LnurlErrorDetails {
384    pub reason: String,
385}
386
387/// The response from a LNURL-auth callback, indicating success or failure.
388#[derive(Clone, Debug, Deserialize, Serialize)]
389#[macros::derive_from(breez_sdk_common::lnurl::LnurlCallbackStatus)]
390#[serde(rename_all = "UPPERCASE")]
391#[serde(tag = "status")]
392#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
393pub enum LnurlCallbackStatus {
394    /// On-wire format is: `{"status": "OK"}`
395    Ok,
396    /// On-wire format is: `{"status": "ERROR", "reason": "error details..."}`
397    #[serde(rename = "ERROR")]
398    ErrorStatus {
399        #[serde(flatten)]
400        error_details: LnurlErrorDetails,
401    },
402}
403
404#[derive(Clone, Debug, Deserialize, Serialize)]
405#[macros::derive_from(breez_sdk_common::lnurl::withdraw::LnurlWithdrawRequestDetails)]
406#[macros::derive_into(breez_sdk_common::lnurl::withdraw::LnurlWithdrawRequestDetails)]
407#[serde(rename_all = "camelCase")]
408#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
409pub struct LnurlWithdrawRequestDetails {
410    pub callback: String,
411    pub k1: String,
412    pub default_description: String,
413    /// The minimum amount, in millisats, that this LNURL-withdraw endpoint accepts
414    pub min_withdrawable: u64,
415    /// The maximum amount, in millisats, that this LNURL-withdraw endpoint accepts
416    pub max_withdrawable: u64,
417}
418
419#[derive(Clone, Debug, Deserialize, Serialize)]
420#[macros::derive_from(breez_sdk_common::input::SparkAddressDetails)]
421#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
422pub struct SparkAddressDetails {
423    /// The raw address string
424    pub address: String,
425    /// The identity public key of the address owner
426    pub identity_public_key: String,
427    pub network: BitcoinNetwork,
428    pub source: PaymentRequestSource,
429}
430
431#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
432#[macros::derive_from(breez_sdk_common::input::SparkInvoiceDetails)]
433#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
434pub struct SparkInvoiceDetails {
435    /// The raw invoice string
436    pub invoice: String,
437    /// The identity public key of the invoice issuer
438    pub identity_public_key: String,
439    pub network: BitcoinNetwork,
440    /// Optional amount denominated in sats if `token_identifier` is absent, otherwise in the token base units
441    pub amount: Option<u128>,
442    /// The token identifier of the token payment. Absence indicates a Bitcoin payment.
443    pub token_identifier: Option<String>,
444    /// Optional expiry time as a unix timestamp in seconds. If not provided, the invoice will never expire.
445    pub expiry_time: Option<u64>,
446    /// Optional description.
447    pub description: Option<String>,
448    /// If set, the invoice may only be fulfilled by a payer with this public key.
449    pub sender_public_key: Option<String>,
450}
451
452#[derive(Clone, Debug, Deserialize, Serialize)]
453#[macros::derive_from(breez_sdk_common::input::LightningAddressDetails)]
454#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
455pub struct LightningAddressDetails {
456    pub address: String,
457    pub pay_request: LnurlPayRequestDetails,
458}
459
460#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
461#[macros::derive_from(breez_sdk_common::input::PaymentRequestSource)]
462#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
463pub struct PaymentRequestSource {
464    pub bip_21_uri: Option<String>,
465    pub bip_353_address: Option<String>,
466}
467
468#[derive(Clone, Debug, Deserialize, Serialize)]
469#[macros::derive_from(breez_sdk_common::input::SilentPaymentAddressDetails)]
470#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
471pub struct SilentPaymentAddressDetails {
472    pub address: String,
473    pub network: BitcoinNetwork,
474    pub source: PaymentRequestSource,
475}
476
477/// Configuration for an external input parser
478#[derive(Debug, Clone, Serialize)]
479#[macros::derive_from(breez_sdk_common::input::ExternalInputParser)]
480#[macros::derive_into(breez_sdk_common::input::ExternalInputParser)]
481#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
482pub struct ExternalInputParser {
483    /// An arbitrary parser provider id
484    pub provider_id: String,
485    /// The external parser will be used when an input conforms to this regex
486    pub input_regex: String,
487    /// The URL of the parser containing a placeholder `<input>` that will be replaced with the
488    /// input to be parsed. The input is sanitized using percent encoding.
489    pub parser_url: String,
490}
491
492/// Supported success action types
493///
494/// Receiving any other (unsupported) success action type will result in a failed parsing,
495/// which will abort the LNURL-pay workflow, as per LUD-09.
496#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
497#[macros::derive_from(breez_sdk_common::lnurl::pay::SuccessAction)]
498#[macros::derive_into(breez_sdk_common::lnurl::pay::SuccessAction)]
499#[serde(rename_all = "camelCase")]
500#[serde(tag = "tag")]
501#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
502pub enum SuccessAction {
503    /// AES type, described in LUD-10
504    Aes {
505        #[serde(flatten)]
506        data: AesSuccessActionData,
507    },
508
509    /// Message type, described in LUD-09
510    Message {
511        #[serde(flatten)]
512        data: MessageSuccessActionData,
513    },
514
515    /// URL type, described in LUD-09
516    Url {
517        #[serde(flatten)]
518        data: UrlSuccessActionData,
519    },
520}
521
522/// [`SuccessAction`] where contents are ready to be consumed by the caller
523///
524/// Contents are identical to [`SuccessAction`], except for AES where the ciphertext is decrypted.
525#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
526#[macros::derive_from(breez_sdk_common::lnurl::pay::SuccessActionProcessed)]
527#[macros::derive_into(breez_sdk_common::lnurl::pay::SuccessActionProcessed)]
528#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
529pub enum SuccessActionProcessed {
530    /// See [`SuccessAction::Aes`] for received payload
531    ///
532    /// See [`AesSuccessActionDataDecrypted`] for decrypted payload
533    Aes { result: AesSuccessActionDataResult },
534
535    /// See [`SuccessAction::Message`]
536    Message { data: MessageSuccessActionData },
537
538    /// See [`SuccessAction::Url`]
539    Url { data: UrlSuccessActionData },
540}
541
542/// Payload of the AES success action, as received from the LNURL endpoint
543///
544/// See [`AesSuccessActionDataDecrypted`] for a similar wrapper containing the decrypted payload
545#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
546#[macros::derive_from(breez_sdk_common::lnurl::pay::AesSuccessActionData)]
547#[macros::derive_into(breez_sdk_common::lnurl::pay::AesSuccessActionData)]
548#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
549pub struct AesSuccessActionData {
550    /// Contents description, up to 144 characters
551    pub description: String,
552
553    /// Base64, AES-encrypted data where encryption key is payment preimage, up to 4kb of characters
554    pub ciphertext: String,
555
556    /// Base64, initialization vector, exactly 24 characters
557    pub iv: String,
558}
559
560/// Result of decryption of [`AesSuccessActionData`] payload
561#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
562#[macros::derive_from(breez_sdk_common::lnurl::pay::AesSuccessActionDataResult)]
563#[macros::derive_into(breez_sdk_common::lnurl::pay::AesSuccessActionDataResult)]
564#[cfg_attr(feature = "uniffi", derive(uniffi::Enum))]
565pub enum AesSuccessActionDataResult {
566    Decrypted { data: AesSuccessActionDataDecrypted },
567    ErrorStatus { reason: String },
568}
569
570/// Wrapper for the decrypted [`AesSuccessActionData`] payload
571#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
572#[macros::derive_from(breez_sdk_common::lnurl::pay::AesSuccessActionDataDecrypted)]
573#[macros::derive_into(breez_sdk_common::lnurl::pay::AesSuccessActionDataDecrypted)]
574#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
575pub struct AesSuccessActionDataDecrypted {
576    /// Contents description, up to 144 characters
577    pub description: String,
578
579    /// Decrypted content
580    pub plaintext: String,
581}
582
583#[derive(PartialEq, Eq, Debug, Clone, Deserialize, Serialize)]
584#[macros::derive_from(breez_sdk_common::lnurl::pay::MessageSuccessActionData)]
585#[macros::derive_into(breez_sdk_common::lnurl::pay::MessageSuccessActionData)]
586#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
587pub struct MessageSuccessActionData {
588    pub message: String,
589}
590
591#[derive(PartialEq, Eq, Debug, Clone, Deserialize, Serialize)]
592#[macros::derive_from(breez_sdk_common::lnurl::pay::UrlSuccessActionData)]
593#[macros::derive_into(breez_sdk_common::lnurl::pay::UrlSuccessActionData)]
594#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
595pub struct UrlSuccessActionData {
596    /// Contents description, up to 144 characters
597    pub description: String,
598
599    /// URL of the success action
600    pub url: String,
601
602    /// Indicates the success URL domain matches the LNURL callback domain.
603    ///
604    /// See <https://github.com/lnurl/luds/blob/luds/09.md>
605    pub matches_callback_domain: bool,
606}