1+ use std:: sync:: Arc ;
2+
13use bitcoincore_rpc:: jsonrpc:: serde_json;
2- use payjoin:: receive:: v2:: Receiver ;
3- use payjoin:: send:: v2:: Sender ;
4- use sled:: { IVec , Tree } ;
4+ use payjoin:: persist:: { Persister , Value } ;
5+ use payjoin:: receive:: v2:: { Receiver , ReceiverToken } ;
6+ use payjoin:: send:: v2:: { Sender , SenderToken } ;
7+ use sled:: Tree ;
58use url:: Url ;
69
710use super :: * ;
811
9- impl Database {
10- pub ( crate ) fn insert_recv_session ( & self , session : Receiver ) -> Result < ( ) > {
11- let recv_tree = self . 0 . open_tree ( "recv_sessions" ) ?;
12- let key = & session. id ( ) ;
13- let value = serde_json:: to_string ( & session) . map_err ( Error :: Serialize ) ?;
14- recv_tree. insert ( key. as_slice ( ) , IVec :: from ( value. as_str ( ) ) ) ?;
12+ pub ( crate ) struct SenderPersister ( Arc < Database > ) ;
13+ impl SenderPersister {
14+ pub fn new ( db : Arc < Database > ) -> Self { Self ( db) }
15+ }
16+
17+ impl Persister < Sender > for SenderPersister {
18+ type Token = SenderToken ;
19+ type Error = crate :: db:: error:: Error ;
20+ fn save ( & mut self , value : Sender ) -> std:: result:: Result < SenderToken , Self :: Error > {
21+ let send_tree = self . 0 . 0 . open_tree ( "send_sessions" ) ?;
22+ let key = value. key ( ) ;
23+ let value = serde_json:: to_vec ( & value) . map_err ( Error :: Serialize ) ?;
24+ send_tree. insert ( key. clone ( ) , value. as_slice ( ) ) ?;
25+ send_tree. flush ( ) ?;
26+ Ok ( key)
27+ }
28+
29+ fn load ( & self , key : SenderToken ) -> std:: result:: Result < Sender , Self :: Error > {
30+ let send_tree = self . 0 . 0 . open_tree ( "send_sessions" ) ?;
31+ let value = send_tree. get ( key. as_ref ( ) ) ?. ok_or ( Error :: NotFound ( key. to_string ( ) ) ) ?;
32+ serde_json:: from_slice ( & value) . map_err ( Error :: Deserialize )
33+ }
34+ }
35+
36+ pub ( crate ) struct ReceiverPersister ( Arc < Database > ) ;
37+ impl ReceiverPersister {
38+ pub fn new ( db : Arc < Database > ) -> Self { Self ( db) }
39+ }
40+
41+ impl Persister < Receiver > for ReceiverPersister {
42+ type Token = ReceiverToken ;
43+ type Error = crate :: db:: error:: Error ;
44+ fn save ( & mut self , value : Receiver ) -> std:: result:: Result < ReceiverToken , Self :: Error > {
45+ let recv_tree = self . 0 . 0 . open_tree ( "recv_sessions" ) ?;
46+ let key = value. key ( ) ;
47+ let value = serde_json:: to_vec ( & value) . map_err ( Error :: Serialize ) ?;
48+ recv_tree. insert ( key. clone ( ) , value. as_slice ( ) ) ?;
1549 recv_tree. flush ( ) ?;
16- Ok ( ( ) )
50+ Ok ( key )
1751 }
52+ fn load ( & self , key : ReceiverToken ) -> std:: result:: Result < Receiver , Self :: Error > {
53+ let recv_tree = self . 0 . 0 . open_tree ( "recv_sessions" ) ?;
54+ let value = recv_tree. get ( key. as_ref ( ) ) ?. ok_or ( Error :: NotFound ( key. to_string ( ) ) ) ?;
55+ serde_json:: from_slice ( & value) . map_err ( Error :: Deserialize )
56+ }
57+ }
1858
59+ impl Database {
1960 pub ( crate ) fn get_recv_sessions ( & self ) -> Result < Vec < Receiver > > {
2061 let recv_tree = self . 0 . open_tree ( "recv_sessions" ) ?;
2162 let mut sessions = Vec :: new ( ) ;
@@ -34,14 +75,6 @@ impl Database {
3475 Ok ( ( ) )
3576 }
3677
37- pub ( crate ) fn insert_send_session ( & self , session : & mut Sender , pj_url : & Url ) -> Result < ( ) > {
38- let send_tree: Tree = self . 0 . open_tree ( "send_sessions" ) ?;
39- let value = serde_json:: to_string ( session) . map_err ( Error :: Serialize ) ?;
40- send_tree. insert ( pj_url. to_string ( ) , IVec :: from ( value. as_str ( ) ) ) ?;
41- send_tree. flush ( ) ?;
42- Ok ( ( ) )
43- }
44-
4578 pub ( crate ) fn get_send_sessions ( & self ) -> Result < Vec < Sender > > {
4679 let send_tree: Tree = self . 0 . open_tree ( "send_sessions" ) ?;
4780 let mut sessions = Vec :: new ( ) ;
@@ -55,7 +88,7 @@ impl Database {
5588
5689 pub ( crate ) fn get_send_session ( & self , pj_url : & Url ) -> Result < Option < Sender > > {
5790 let send_tree = self . 0 . open_tree ( "send_sessions" ) ?;
58- if let Some ( val) = send_tree. get ( pj_url. to_string ( ) ) ? {
91+ if let Some ( val) = send_tree. get ( pj_url. as_str ( ) ) ? {
5992 let session: Sender = serde_json:: from_slice ( & val) . map_err ( Error :: Deserialize ) ?;
6093 Ok ( Some ( session) )
6194 } else {
@@ -65,7 +98,7 @@ impl Database {
6598
6699 pub ( crate ) fn clear_send_session ( & self , pj_url : & Url ) -> Result < ( ) > {
67100 let send_tree: Tree = self . 0 . open_tree ( "send_sessions" ) ?;
68- send_tree. remove ( pj_url. to_string ( ) ) ?;
101+ send_tree. remove ( pj_url. as_str ( ) ) ?;
69102 send_tree. flush ( ) ?;
70103 Ok ( ( ) )
71104 }
0 commit comments