Macroize feature printing to ensure we don't miss new flags 2021-07-log-features-more
authorMatt Corallo <git@bluematt.me>
Wed, 28 Jul 2021 21:06:49 +0000 (21:06 +0000)
committerMatt Corallo <git@bluematt.me>
Wed, 28 Jul 2021 21:06:49 +0000 (21:06 +0000)
lightning/src/ln/features.rs
lightning/src/ln/peer_handler.rs

index eb0100db675de8842e1d317d4a2b9c5c6e7b9ab1..b90748aa87b7e5cd55bf0461244fd2c654feb7eb 100644 (file)
@@ -89,6 +89,28 @@ mod sealed {
                                        )*
                                ];
                        }
+
+                       impl alloc::fmt::Display for Features<$context> {
+                               fn fmt(&self, fmt: &mut alloc::fmt::Formatter) -> Result<(), alloc::fmt::Error> {
+                                       $(
+                                               $(
+                                                       fmt.write_fmt(format_args!("{}: {}, ", stringify!($required_feature),
+                                                               if <$context as $required_feature>::requires_feature(&self.flags) { "required" }
+                                                               else if <$context as $required_feature>::supports_feature(&self.flags) { "supported" }
+                                                               else { "not supported" }))?;
+                                               )*
+                                               $(
+                                                       fmt.write_fmt(format_args!("{}: {}, ", stringify!($optional_feature),
+                                                               if <$context as $optional_feature>::requires_feature(&self.flags) { "required" }
+                                                               else if <$context as $optional_feature>::supports_feature(&self.flags) { "supported" }
+                                                               else { "not supported" }))?;
+                                               )*
+                                       )*
+                                       fmt.write_fmt(format_args!("unknown flags: {}",
+                                               if self.requires_unknown_bits() { "required" }
+                                               else if self.supports_unknown_bits() { "supported" } else { "none" }))
+                               }
+                       }
                };
        }
 
@@ -566,6 +588,7 @@ impl<T: sealed::DataLossProtect> Features<T> {
        pub(crate) fn requires_data_loss_protect(&self) -> bool {
                <T as sealed::DataLossProtect>::requires_feature(&self.flags)
        }
+       #[cfg(test)]
        pub(crate) fn supports_data_loss_protect(&self) -> bool {
                <T as sealed::DataLossProtect>::supports_feature(&self.flags)
        }
index 0ec24fbf84c3ad31bfdf32bff421ffa310b9873d..ec7500190d7ec3b062636fca716e71805ffddb05 100644 (file)
@@ -888,15 +888,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref> PeerManager<D
                                        return Err(PeerHandleError{ no_connection_possible: false }.into());
                                }
 
-                               log_info!(
-                                       self.logger, "Received peer Init message: data_loss_protect: {}, initial_routing_sync: {}, upfront_shutdown_script: {}, gossip_queries: {}, static_remote_key: {}, unknown flags (local and global): {}",
-                                       if msg.features.supports_data_loss_protect() { "supported" } else { "not supported"},
-                                       if msg.features.initial_routing_sync() { "requested" } else { "not requested" },
-                                       if msg.features.supports_upfront_shutdown_script() { "supported" } else { "not supported"},
-                                       if msg.features.supports_gossip_queries() { "supported" } else { "not supported" },
-                                       if msg.features.supports_static_remote_key() { "supported" } else { "not supported"},
-                                       if msg.features.supports_unknown_bits() { "present" } else { "none" }
-                               );
+                               log_info!(self.logger, "Received peer Init message: {}", msg.features);
 
                                if msg.features.initial_routing_sync() {
                                        peer.sync_status = InitSyncTracker::ChannelsSyncing(0);