Skip to content

Commit 64bf483

Browse files
authored
Merge pull request #1094 from TheBlueMatt/2021-09-type-explicit-bounds
Use Infallible for the unconstructable default custom message type
2 parents e12d88d + ab49e41 commit 64bf483

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

lightning/src/ln/peer_handler.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ use routing::network_graph::NetGraphMsgHandler;
3232
use prelude::*;
3333
use io;
3434
use alloc::collections::LinkedList;
35-
use alloc::fmt::Debug;
3635
use sync::{Arc, Mutex};
3736
use core::sync::atomic::{AtomicUsize, Ordering};
3837
use core::{cmp, hash, fmt, mem};
3938
use core::ops::Deref;
39+
use core::convert::Infallible;
4040
#[cfg(feature = "std")] use std::error;
4141

4242
use bitcoin::hashes::sha256::Hash as Sha256;
@@ -80,28 +80,28 @@ impl Deref for IgnoringMessageHandler {
8080
fn deref(&self) -> &Self { self }
8181
}
8282

83-
impl wire::Type for () {
83+
// Implement Type for Infallible, note that it cannot be constructed, and thus you can never call a
84+
// method that takes self for it.
85+
impl wire::Type for Infallible {
8486
fn type_id(&self) -> u16 {
85-
// We should never call this for `DummyCustomType`
8687
unreachable!();
8788
}
8889
}
89-
90-
impl Writeable for () {
90+
impl Writeable for Infallible {
9191
fn write<W: Writer>(&self, _: &mut W) -> Result<(), io::Error> {
9292
unreachable!();
9393
}
9494
}
9595

9696
impl wire::CustomMessageReader for IgnoringMessageHandler {
97-
type CustomMessage = ();
97+
type CustomMessage = Infallible;
9898
fn read<R: io::Read>(&self, _message_type: u16, _buffer: &mut R) -> Result<Option<Self::CustomMessage>, msgs::DecodeError> {
9999
Ok(None)
100100
}
101101
}
102102

103103
impl CustomMessageHandler for IgnoringMessageHandler {
104-
fn handle_custom_message(&self, _msg: Self::CustomMessage, _sender_node_id: &PublicKey) -> Result<(), LightningError> {
104+
fn handle_custom_message(&self, _msg: Infallible, _sender_node_id: &PublicKey) -> Result<(), LightningError> {
105105
// Since we always return `None` in the read the handle method should never be called.
106106
unreachable!();
107107
}
@@ -469,7 +469,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
469469
CM::Target: ChannelMessageHandler,
470470
RM::Target: RoutingMessageHandler,
471471
L::Target: Logger,
472-
CMH::Target: CustomMessageHandler + wire::CustomMessageReader {
472+
CMH::Target: CustomMessageHandler {
473473
/// Constructs a new PeerManager with the given message handlers and node_id secret key
474474
/// ephemeral_random_data is used to derive per-connection ephemeral keys and must be
475475
/// cryptographically secure random bytes.
@@ -719,7 +719,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
719719
}
720720

721721
/// Append a message to a peer's pending outbound/write buffer, and update the map of peers needing sends accordingly.
722-
fn enqueue_message<M: wire::Type + Writeable + Debug>(&self, peer: &mut Peer, message: &M) {
722+
fn enqueue_message<M: wire::Type>(&self, peer: &mut Peer, message: &M) {
723723
let mut buffer = VecWriter(Vec::with_capacity(2048));
724724
wire::write(message, &mut buffer).unwrap(); // crash if the write failed
725725
let encoded_message = buffer.0;

lightning/src/ln/wire.rs

+4
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,10 @@ mod tests {
457457
}
458458
}
459459

460+
impl Type for () {
461+
fn type_id(&self) -> u16 { unreachable!(); }
462+
}
463+
460464
#[test]
461465
fn is_even_message_type() {
462466
let message = Message::<()>::Unknown(42);

lightning/src/util/ser.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,11 @@ impl<A: Writeable, B: Writeable, C: Writeable> Writeable for (A, B, C) {
879879
}
880880
}
881881

882+
impl Writeable for () {
883+
fn write<W: Writer>(&self, _: &mut W) -> Result<(), io::Error> {
884+
Ok(())
885+
}
886+
}
882887
impl Readable for () {
883888
fn read<R: Read>(_r: &mut R) -> Result<Self, DecodeError> {
884889
Ok(())
@@ -892,7 +897,6 @@ impl Writeable for String {
892897
w.write_all(self.as_bytes())
893898
}
894899
}
895-
896900
impl Readable for String {
897901
#[inline]
898902
fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {

0 commit comments

Comments
 (0)