@@ -14,21 +14,21 @@ use std::sync::{Arc, RwLock};
14
14
pub ( crate ) const PEER_INFO_PERSISTENCE_KEY : & str = "peers" ;
15
15
16
16
pub ( crate ) struct PeerInfoStorage < K : KVStorePersister > {
17
- peers : RwLock < PeerInfoStorageSerWrapper > ,
17
+ peers : RwLock < Vec < PeerInfo > > ,
18
18
persister : Arc < K > ,
19
19
}
20
20
21
21
impl < K : KVStorePersister > PeerInfoStorage < K > {
22
22
pub ( crate ) fn new ( persister : Arc < K > ) -> Self {
23
- let peers = RwLock :: new ( PeerInfoStorageSerWrapper ( Vec :: new ( ) ) ) ;
23
+ let peers = RwLock :: new ( Vec :: new ( ) ) ;
24
24
Self { peers, persister }
25
25
}
26
26
27
27
pub ( crate ) fn add_peer ( & self , peer_info : PeerInfo ) -> Result < ( ) , Error > {
28
28
let mut locked_peers = self . peers . write ( ) . unwrap ( ) ;
29
29
30
30
// Check if we have the peer. If so, either update it or do nothing.
31
- for stored_info in locked_peers. 0 . iter_mut ( ) {
31
+ for stored_info in locked_peers. iter_mut ( ) {
32
32
if stored_info. pubkey == peer_info. pubkey {
33
33
if stored_info. address != peer_info. address {
34
34
stored_info. address = peer_info. address ;
@@ -37,9 +37,9 @@ impl<K: KVStorePersister> PeerInfoStorage<K> {
37
37
}
38
38
}
39
39
40
- locked_peers. 0 . push ( peer_info) ;
40
+ locked_peers. push ( peer_info) ;
41
41
self . persister
42
- . persist ( PEER_INFO_PERSISTENCE_KEY , & * locked_peers)
42
+ . persist ( PEER_INFO_PERSISTENCE_KEY , & PeerInfoStorageSerWrapper ( & * locked_peers) )
43
43
. map_err ( |_| Error :: PersistenceFailed ) ?;
44
44
45
45
Ok ( ( ) )
@@ -48,17 +48,17 @@ impl<K: KVStorePersister> PeerInfoStorage<K> {
48
48
pub ( crate ) fn remove_peer ( & self , peer_pubkey : & PublicKey ) -> Result < ( ) , Error > {
49
49
let mut locked_peers = self . peers . write ( ) . unwrap ( ) ;
50
50
51
- locked_peers. 0 . retain ( |info| info. pubkey != * peer_pubkey) ;
51
+ locked_peers. retain ( |info| info. pubkey != * peer_pubkey) ;
52
52
53
53
self . persister
54
- . persist ( PEER_INFO_PERSISTENCE_KEY , & * locked_peers)
54
+ . persist ( PEER_INFO_PERSISTENCE_KEY , & PeerInfoStorageSerWrapper ( & * locked_peers) )
55
55
. map_err ( |_| Error :: PersistenceFailed ) ?;
56
56
57
57
Ok ( ( ) )
58
58
}
59
59
60
60
pub ( crate ) fn peers ( & self ) -> Vec < PeerInfo > {
61
- self . peers . read ( ) . unwrap ( ) . 0 . clone ( )
61
+ self . peers . read ( ) . unwrap ( ) . clone ( )
62
62
}
63
63
}
64
64
@@ -67,15 +67,16 @@ impl<K: KVStorePersister> ReadableArgs<Arc<K>> for PeerInfoStorage<K> {
67
67
fn read < R : lightning:: io:: Read > (
68
68
reader : & mut R , persister : Arc < K > ,
69
69
) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
70
- let peers: RwLock < PeerInfoStorageSerWrapper > = RwLock :: new ( Readable :: read ( reader) ?) ;
70
+ let read_peers: PeerInfoStorageDeserWrapper = Readable :: read ( reader) ?;
71
+ let peers: RwLock < Vec < PeerInfo > > = RwLock :: new ( read_peers. 0 ) ;
71
72
Ok ( Self { peers, persister } )
72
73
}
73
74
}
74
75
75
76
#[ derive( Clone , Debug , PartialEq , Eq ) ]
76
- pub ( crate ) struct PeerInfoStorageSerWrapper ( Vec < PeerInfo > ) ;
77
+ pub ( crate ) struct PeerInfoStorageDeserWrapper ( Vec < PeerInfo > ) ;
77
78
78
- impl Readable for PeerInfoStorageSerWrapper {
79
+ impl Readable for PeerInfoStorageDeserWrapper {
79
80
fn read < R : lightning:: io:: Read > (
80
81
reader : & mut R ,
81
82
) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
@@ -84,11 +85,13 @@ impl Readable for PeerInfoStorageSerWrapper {
84
85
for _ in 0 ..len {
85
86
peers. push ( Readable :: read ( reader) ?) ;
86
87
}
87
- Ok ( PeerInfoStorageSerWrapper ( peers) )
88
+ Ok ( Self ( peers) )
88
89
}
89
90
}
90
91
91
- impl Writeable for PeerInfoStorageSerWrapper {
92
+ pub ( crate ) struct PeerInfoStorageSerWrapper < ' a > ( & ' a Vec < PeerInfo > ) ;
93
+
94
+ impl Writeable for PeerInfoStorageSerWrapper < ' _ > {
92
95
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
93
96
( self . 0 . len ( ) as u16 ) . write ( writer) ?;
94
97
for e in self . 0 . iter ( ) {
0 commit comments