Skip to content

Commit b423804

Browse files
committed
f Use Ser/Deser wrappers only when needed
1 parent f85f1f2 commit b423804

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

src/peer_store.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@ use std::sync::{Arc, RwLock};
1414
pub(crate) const PEER_INFO_PERSISTENCE_KEY: &str = "peers";
1515

1616
pub(crate) struct PeerInfoStorage<K: KVStorePersister> {
17-
peers: RwLock<PeerInfoStorageSerWrapper>,
17+
peers: RwLock<Vec<PeerInfo>>,
1818
persister: Arc<K>,
1919
}
2020

2121
impl<K: KVStorePersister> PeerInfoStorage<K> {
2222
pub(crate) fn new(persister: Arc<K>) -> Self {
23-
let peers = RwLock::new(PeerInfoStorageSerWrapper(Vec::new()));
23+
let peers = RwLock::new(Vec::new());
2424
Self { peers, persister }
2525
}
2626

2727
pub(crate) fn add_peer(&self, peer_info: PeerInfo) -> Result<(), Error> {
2828
let mut locked_peers = self.peers.write().unwrap();
2929

3030
// 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() {
3232
if stored_info.pubkey == peer_info.pubkey {
3333
if stored_info.address != peer_info.address {
3434
stored_info.address = peer_info.address;
@@ -37,9 +37,9 @@ impl<K: KVStorePersister> PeerInfoStorage<K> {
3737
}
3838
}
3939

40-
locked_peers.0.push(peer_info);
40+
locked_peers.push(peer_info);
4141
self.persister
42-
.persist(PEER_INFO_PERSISTENCE_KEY, &*locked_peers)
42+
.persist(PEER_INFO_PERSISTENCE_KEY, &PeerInfoStorageSerWrapper(&*locked_peers))
4343
.map_err(|_| Error::PersistenceFailed)?;
4444

4545
Ok(())
@@ -48,17 +48,17 @@ impl<K: KVStorePersister> PeerInfoStorage<K> {
4848
pub(crate) fn remove_peer(&self, peer_pubkey: &PublicKey) -> Result<(), Error> {
4949
let mut locked_peers = self.peers.write().unwrap();
5050

51-
locked_peers.0.retain(|info| info.pubkey != *peer_pubkey);
51+
locked_peers.retain(|info| info.pubkey != *peer_pubkey);
5252

5353
self.persister
54-
.persist(PEER_INFO_PERSISTENCE_KEY, &*locked_peers)
54+
.persist(PEER_INFO_PERSISTENCE_KEY, &PeerInfoStorageSerWrapper(&*locked_peers))
5555
.map_err(|_| Error::PersistenceFailed)?;
5656

5757
Ok(())
5858
}
5959

6060
pub(crate) fn peers(&self) -> Vec<PeerInfo> {
61-
self.peers.read().unwrap().0.clone()
61+
self.peers.read().unwrap().clone()
6262
}
6363
}
6464

@@ -67,15 +67,16 @@ impl<K: KVStorePersister> ReadableArgs<Arc<K>> for PeerInfoStorage<K> {
6767
fn read<R: lightning::io::Read>(
6868
reader: &mut R, persister: Arc<K>,
6969
) -> 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);
7172
Ok(Self { peers, persister })
7273
}
7374
}
7475

7576
#[derive(Clone, Debug, PartialEq, Eq)]
76-
pub(crate) struct PeerInfoStorageSerWrapper(Vec<PeerInfo>);
77+
pub(crate) struct PeerInfoStorageDeserWrapper(Vec<PeerInfo>);
7778

78-
impl Readable for PeerInfoStorageSerWrapper {
79+
impl Readable for PeerInfoStorageDeserWrapper {
7980
fn read<R: lightning::io::Read>(
8081
reader: &mut R,
8182
) -> Result<Self, lightning::ln::msgs::DecodeError> {
@@ -84,11 +85,13 @@ impl Readable for PeerInfoStorageSerWrapper {
8485
for _ in 0..len {
8586
peers.push(Readable::read(reader)?);
8687
}
87-
Ok(PeerInfoStorageSerWrapper(peers))
88+
Ok(Self(peers))
8889
}
8990
}
9091

91-
impl Writeable for PeerInfoStorageSerWrapper {
92+
pub(crate) struct PeerInfoStorageSerWrapper<'a>(&'a Vec<PeerInfo>);
93+
94+
impl Writeable for PeerInfoStorageSerWrapper<'_> {
9295
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
9396
(self.0.len() as u16).write(writer)?;
9497
for e in self.0.iter() {

0 commit comments

Comments
 (0)