Skip to content

Commit e8c000f

Browse files
committed
Update FFI transition objects to return PersistedError
`PersistedError` encapsulates the api side errors as well as storage related errors that can occur during a state transition. The following commit updates all the sender side transitions objects to return `PersistedError`. There was a naming conflict with the reciever type. Both error types had to be renamed and prefixed with "Sender|Receiver_...".
1 parent d48e230 commit e8c000f

File tree

6 files changed

+142
-63
lines changed

6 files changed

+142
-63
lines changed

payjoin-ffi/src/receive/error.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use std::sync::Arc;
22

33
use payjoin::receive;
4-
use crate::{uri::error::IntoUrlError, error::ImplementationError};
4+
5+
use crate::error::ImplementationError;
6+
use crate::uri::error::IntoUrlError;
57

68
/// The top-level error type for the payjoin receiver
79
#[derive(Debug, thiserror::Error)]
@@ -36,7 +38,7 @@ impl From<receive::Error> for Error {
3638
#[derive(Debug, thiserror::Error)]
3739
#[error(transparent)]
3840
#[cfg_attr(feature = "uniffi", derive(uniffi::Error))]
39-
pub enum PersistedError {
41+
pub enum ReceiverPersistedError {
4042
/// rust-payjoin receiver error
4143
#[error(transparent)]
4244
Receiver(Error),
@@ -45,29 +47,29 @@ pub enum PersistedError {
4547
Storage(Arc<ImplementationError>),
4648
}
4749

48-
impl From<ImplementationError> for PersistedError {
49-
fn from(value: ImplementationError) -> Self { PersistedError::Storage(Arc::new(value)) }
50+
impl From<ImplementationError> for ReceiverPersistedError {
51+
fn from(value: ImplementationError) -> Self { ReceiverPersistedError::Storage(Arc::new(value)) }
5052
}
5153

5254
macro_rules! impl_persisted_error_from {
5355
(
5456
$api_error_ty:ty,
5557
$receiver_arm:expr
5658
) => {
57-
impl<S> From<payjoin::persist::PersistedError<$api_error_ty, S>> for PersistedError
59+
impl<S> From<payjoin::persist::PersistedError<$api_error_ty, S>> for ReceiverPersistedError
5860
where
5961
S: std::error::Error,
6062
{
6163
fn from(err: payjoin::persist::PersistedError<$api_error_ty, S>) -> Self {
6264
if let Some(storage_err) = err.storage_error_ref() {
63-
return PersistedError::Storage(Arc::new(ImplementationError::from(
65+
return ReceiverPersistedError::Storage(Arc::new(ImplementationError::from(
6466
storage_err.to_string(),
6567
)));
6668
}
6769
if let Some(api_err) = err.api_error() {
68-
return PersistedError::Receiver($receiver_arm(api_err));
70+
return ReceiverPersistedError::Receiver($receiver_arm(api_err));
6971
}
70-
PersistedError::Receiver(Error::Unexpected)
72+
ReceiverPersistedError::Receiver(Error::Unexpected)
7173
}
7274
}
7375
};

payjoin-ffi/src/receive/mod.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use payjoin::persist::{MaybeFatalTransition, NextStateTransition, SessionPersist
1313
use crate::bitcoin_ffi::{Address, OutPoint, Script, TxOut};
1414
pub use crate::error::{ImplementationError, SerdeJsonError};
1515
use crate::ohttp::OhttpKeys;
16-
use crate::receive::error::{PersistedError, ReceiverReplayError};
16+
use crate::receive::error::{ReceiverPersistedError, ReceiverReplayError};
1717
use crate::{ClientResponse, OutputSubstitution, Request};
1818

1919
pub mod error;
@@ -71,7 +71,7 @@ pub struct InitInputsTransition(
7171
);
7272

7373
impl InitInputsTransition {
74-
pub fn save<P>(&self, persister: &P) -> Result<WithContext, PersistedError>
74+
pub fn save<P>(&self, persister: &P) -> Result<WithContext, ReceiverPersistedError>
7575
where
7676
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
7777
{
@@ -82,7 +82,7 @@ impl InitInputsTransition {
8282
.take()
8383
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
8484

85-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
85+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
8686
Ok(res.into())
8787
}
8888
}
@@ -157,7 +157,7 @@ pub struct WithContextTransition(
157157
);
158158

159159
impl WithContextTransition {
160-
pub fn save<P>(&self, persister: &P) -> Result<WithContextTransitionOutcome, PersistedError>
160+
pub fn save<P>(&self, persister: &P) -> Result<WithContextTransitionOutcome, ReceiverPersistedError>
161161
where
162162
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
163163
{
@@ -168,7 +168,7 @@ impl WithContextTransition {
168168
.take()
169169
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
170170

171-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
171+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
172172
Ok(res.into())
173173
}
174174
}
@@ -282,7 +282,7 @@ pub struct UncheckedProposalTransition(
282282
);
283283

284284
impl UncheckedProposalTransition {
285-
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsOwned, PersistedError>
285+
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsOwned, ReceiverPersistedError>
286286
where
287287
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
288288
{
@@ -293,7 +293,7 @@ impl UncheckedProposalTransition {
293293
.take()
294294
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
295295

296-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
296+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
297297
Ok(res.into())
298298
}
299299
}
@@ -312,7 +312,7 @@ pub struct AssumeInteractiveTransition(
312312
);
313313

314314
impl AssumeInteractiveTransition {
315-
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsOwned, PersistedError>
315+
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsOwned, ReceiverPersistedError>
316316
where
317317
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
318318
{
@@ -324,7 +324,7 @@ impl AssumeInteractiveTransition {
324324
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
325325

326326
let res = value.save(persister).map_err(|e| {
327-
PersistedError::Storage(Arc::new(ImplementationError::from(e.to_string())))
327+
ReceiverPersistedError::Storage(Arc::new(ImplementationError::from(e.to_string())))
328328
})?;
329329
Ok(res.into())
330330
}
@@ -396,7 +396,7 @@ pub struct MaybeInputsOwnedTransition(
396396
);
397397

398398
impl MaybeInputsOwnedTransition {
399-
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsSeen, PersistedError>
399+
pub fn save<P>(&self, persister: &P) -> Result<MaybeInputsSeen, ReceiverPersistedError>
400400
where
401401
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
402402
{
@@ -407,7 +407,7 @@ impl MaybeInputsOwnedTransition {
407407
.take()
408408
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
409409

410-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
410+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
411411
Ok(res.into())
412412
}
413413
}
@@ -449,7 +449,7 @@ pub struct MaybeInputsSeenTransition(
449449
);
450450

451451
impl MaybeInputsSeenTransition {
452-
pub fn save<P>(&self, persister: &P) -> Result<OutputsUnknown, PersistedError>
452+
pub fn save<P>(&self, persister: &P) -> Result<OutputsUnknown, ReceiverPersistedError>
453453
where
454454
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
455455
{
@@ -460,7 +460,7 @@ impl MaybeInputsSeenTransition {
460460
.take()
461461
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
462462

463-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
463+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
464464
Ok(res.into())
465465
}
466466
}
@@ -506,7 +506,7 @@ pub struct OutputsUnknownTransition(
506506
);
507507

508508
impl OutputsUnknownTransition {
509-
pub fn save<P>(&self, persister: &P) -> Result<WantsOutputs, PersistedError>
509+
pub fn save<P>(&self, persister: &P) -> Result<WantsOutputs, ReceiverPersistedError>
510510
where
511511
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
512512
{
@@ -517,7 +517,7 @@ impl OutputsUnknownTransition {
517517
.take()
518518
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
519519

520-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
520+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
521521
Ok(res.into())
522522
}
523523
}
@@ -558,7 +558,7 @@ pub struct WantsOutputsTransition(
558558
);
559559

560560
impl WantsOutputsTransition {
561-
pub fn save<P>(&self, persister: &P) -> Result<WantsInputs, PersistedError>
561+
pub fn save<P>(&self, persister: &P) -> Result<WantsInputs, ReceiverPersistedError>
562562
where
563563
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
564564
{
@@ -569,7 +569,7 @@ impl WantsOutputsTransition {
569569
.take()
570570
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
571571

572-
let res = value.save(persister).map_err(|e| PersistedError::Storage(Arc::new(ImplementationError::from(e.to_string()))))?;
572+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::Storage(Arc::new(ImplementationError::from(e.to_string()))))?;
573573
Ok(res.into())
574574
}
575575
}
@@ -629,7 +629,7 @@ pub struct WantsInputsTransition(
629629
);
630630

631631
impl WantsInputsTransition {
632-
pub fn save<P>(&self, persister: &P) -> Result<ProvisionalProposal, PersistedError>
632+
pub fn save<P>(&self, persister: &P) -> Result<ProvisionalProposal, ReceiverPersistedError>
633633
where
634634
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
635635
{
@@ -640,7 +640,7 @@ impl WantsInputsTransition {
640640
.take()
641641
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
642642

643-
let res = value.save(persister).map_err(|e| PersistedError::Storage(Arc::new(ImplementationError::from(e.to_string()))))?;
643+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::Storage(Arc::new(ImplementationError::from(e.to_string()))))?;
644644
Ok(res.into())
645645
}
646646
}
@@ -735,7 +735,7 @@ pub struct ProvisionalProposalTransition(
735735
);
736736

737737
impl ProvisionalProposalTransition {
738-
pub fn save<P>(&self, persister: &P) -> Result<PayjoinProposal, PersistedError>
738+
pub fn save<P>(&self, persister: &P) -> Result<PayjoinProposal, ReceiverPersistedError>
739739
where
740740
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
741741
{
@@ -746,7 +746,7 @@ impl ProvisionalProposalTransition {
746746
.take()
747747
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
748748

749-
let res = value.save(persister).map_err(|e| PersistedError::from(e))?;
749+
let res = value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
750750
Ok(res.into())
751751
}
752752
}
@@ -795,7 +795,7 @@ pub struct PayjoinProposalTransition(
795795
);
796796

797797
impl PayjoinProposalTransition {
798-
pub fn save<P>(&self, persister: &P) -> Result<(), PersistedError>
798+
pub fn save<P>(&self, persister: &P) -> Result<(), ReceiverPersistedError>
799799
where
800800
P: SessionPersister<SessionEvent = payjoin::receive::v2::SessionEvent>,
801801
{
@@ -806,7 +806,7 @@ impl PayjoinProposalTransition {
806806
.take()
807807
.ok_or_else(|| ImplementationError::from("Already saved or moved".to_string()))?;
808808

809-
value.save(persister).map_err(|e| PersistedError::from(e))?;
809+
value.save(persister).map_err(|e| ReceiverPersistedError::from(e))?;
810810
Ok(())
811811
}
812812
}

payjoin-ffi/src/receive/uni.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::sync::Arc;
33
use super::InputPair;
44
use crate::bitcoin_ffi::{Address, OutPoint, Script, TxOut};
55
use crate::error::ForeignError;
6-
use crate::receive::error::{PersistedError, ReceiverReplayError};
6+
use crate::receive::error::{ReceiverPersistedError, ReceiverReplayError};
77
pub use crate::receive::{
88
Error, ImplementationError, InputContributionError, JsonReply, OutputSubstitutionError,
99
ReplyableError, SelectionError, SerdeJsonError, SessionError,
@@ -172,7 +172,7 @@ impl MaybeBadInitInputsTransition {
172172
pub fn save(
173173
&self,
174174
persister: Arc<dyn JsonReceiverSessionPersister>,
175-
) -> Result<WithContext, PersistedError> {
175+
) -> Result<WithContext, ReceiverPersistedError> {
176176
let adapter = CallbackPersisterAdapter::new(persister);
177177
let res = self.0.save(&adapter)?;
178178
Ok(res.into())
@@ -239,7 +239,7 @@ impl WithContextTransition {
239239
pub fn save(
240240
&self,
241241
persister: Arc<dyn JsonReceiverSessionPersister>,
242-
) -> Result<WithContextTransitionOutcome, PersistedError> {
242+
) -> Result<WithContextTransitionOutcome, ReceiverPersistedError> {
243243
let adapter = CallbackPersisterAdapter::new(persister);
244244
let res = self.0.save(&adapter)?;
245245
Ok(res.into())
@@ -320,7 +320,7 @@ impl UncheckedProposalTransition {
320320
pub fn save(
321321
&self,
322322
persister: Arc<dyn JsonReceiverSessionPersister>,
323-
) -> Result<MaybeInputsOwned, PersistedError> {
323+
) -> Result<MaybeInputsOwned, ReceiverPersistedError> {
324324
let adapter = CallbackPersisterAdapter::new(persister);
325325
let res = self.0.save(&adapter)?;
326326
Ok(res.into())
@@ -335,7 +335,7 @@ impl AssumeInteractiveTransition {
335335
pub fn save(
336336
&self,
337337
persister: Arc<dyn JsonReceiverSessionPersister>,
338-
) -> Result<MaybeInputsOwned, PersistedError> {
338+
) -> Result<MaybeInputsOwned, ReceiverPersistedError> {
339339
let adapter = CallbackPersisterAdapter::new(persister);
340340
let res = self.0.save(&adapter)?;
341341
Ok(res.into())
@@ -409,7 +409,7 @@ impl MaybeInputsOwnedTransition {
409409
pub fn save(
410410
&self,
411411
persister: Arc<dyn JsonReceiverSessionPersister>,
412-
) -> Result<MaybeInputsSeen, PersistedError> {
412+
) -> Result<MaybeInputsSeen, ReceiverPersistedError> {
413413
let adapter = CallbackPersisterAdapter::new(persister);
414414
let res = self.0.save(&adapter)?;
415415
Ok(res.into())
@@ -453,7 +453,7 @@ impl MaybeInputsSeenTransition {
453453
pub fn save(
454454
&self,
455455
persister: Arc<dyn JsonReceiverSessionPersister>,
456-
) -> Result<OutputsUnknown, PersistedError> {
456+
) -> Result<OutputsUnknown, ReceiverPersistedError> {
457457
let adapter = CallbackPersisterAdapter::new(persister);
458458
let res = self.0.save(&adapter)?;
459459
Ok(res.into())
@@ -493,7 +493,7 @@ impl OutputsUnknownTransition {
493493
pub fn save(
494494
&self,
495495
persister: Arc<dyn JsonReceiverSessionPersister>,
496-
) -> Result<WantsOutputs, PersistedError> {
496+
) -> Result<WantsOutputs, ReceiverPersistedError> {
497497
let adapter = CallbackPersisterAdapter::new(persister);
498498
let res = self.0.save(&adapter)?;
499499
Ok(res.into())
@@ -530,7 +530,7 @@ impl WantsOutputsTransition {
530530
pub fn save(
531531
&self,
532532
persister: Arc<dyn JsonReceiverSessionPersister>,
533-
) -> Result<WantsInputs, PersistedError> {
533+
) -> Result<WantsInputs, ReceiverPersistedError> {
534534
let adapter = CallbackPersisterAdapter::new(persister);
535535
let res = self.0.save(&adapter)?;
536536
Ok(res.into())
@@ -578,7 +578,7 @@ impl WantsInputsTransition {
578578
pub fn save(
579579
&self,
580580
persister: Arc<dyn JsonReceiverSessionPersister>,
581-
) -> Result<ProvisionalProposal, PersistedError> {
581+
) -> Result<ProvisionalProposal, ReceiverPersistedError> {
582582
let adapter = CallbackPersisterAdapter::new(persister);
583583
let res = self.0.save(&adapter)?;
584584
Ok(res.into())
@@ -641,7 +641,7 @@ impl ProvisionalProposalTransition {
641641
pub fn save(
642642
&self,
643643
persister: Arc<dyn JsonReceiverSessionPersister>,
644-
) -> Result<PayjoinProposal, PersistedError> {
644+
) -> Result<PayjoinProposal, ReceiverPersistedError> {
645645
let adapter = CallbackPersisterAdapter::new(persister);
646646
let res = self.0.save(&adapter)?;
647647
Ok(res.into())
@@ -693,7 +693,7 @@ impl PayjoinProposalTransition {
693693
pub fn save(
694694
&self,
695695
persister: Arc<dyn JsonReceiverSessionPersister>,
696-
) -> Result<(), PersistedError> {
696+
) -> Result<(), ReceiverPersistedError> {
697697
let adapter = CallbackPersisterAdapter::new(persister);
698698
self.0.save(&adapter)?;
699699
Ok(())

0 commit comments

Comments
 (0)