Skip to content

Commit bb333fe

Browse files
Add methods to set feature bits.
2 parents 52edab7 + 5f8d3cc commit bb333fe

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

lightning/src/ln/features.rs

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use ln::msgs::DecodeError;
3232
use util::ser::{Readable, Writeable, Writer};
3333

3434
mod sealed {
35+
use ln::features::Features;
3536
/// The context in which [`Features`] are applicable. Defines which features are required and
3637
/// which are optional for the context.
3738
///
@@ -157,7 +158,8 @@ mod sealed {
157158
///
158159
/// [`Context`]: trait.Context.html
159160
macro_rules! define_feature {
160-
($odd_bit: expr, $feature: ident, [$($context: ty),+], $doc: expr) => {
161+
($odd_bit: expr, $feature: ident, [$($context: ty),+], $doc: expr, $supports_setter: ident,
162+
$requires_setter: ident) => {
161163
#[doc = $doc]
162164
///
163165
/// See [BOLT #9] for details.
@@ -242,6 +244,16 @@ mod sealed {
242244
}
243245
}
244246

247+
impl <T: $feature> Features<T> {
248+
pub fn $supports_setter(&mut self) {
249+
<T as $feature>::set_optional_bit(&mut self.flags);
250+
}
251+
252+
pub fn $requires_setter(&mut self) {
253+
<T as $feature>::set_required_bit(&mut self.flags);
254+
}
255+
}
256+
245257
$(
246258
impl $feature for $context {
247259
// EVEN_BIT % 2 == 0
@@ -251,28 +263,34 @@ mod sealed {
251263
const ASSERT_ODD_BIT_PARITY: usize = (<Self as $feature>::ODD_BIT % 2) - 1;
252264
}
253265
)*
266+
254267
}
255268
}
256269

257270
define_feature!(1, DataLossProtect, [InitContext, NodeContext],
258-
"Feature flags for `option_data_loss_protect`.");
271+
"Feature flags for `option_data_loss_protect`.", set_supports_data_loss_protect,
272+
set_requires_data_loss_protect);
259273
// NOTE: Per Bolt #9, initial_routing_sync has no even bit.
260-
define_feature!(3, InitialRoutingSync, [InitContext],
261-
"Feature flags for `initial_routing_sync`.");
274+
define_feature!(3, InitialRoutingSync, [InitContext], "Feature flags for `initial_routing_sync`.",
275+
set_supports_initial_routing_sync, set_requires_initial_routing_sync);
262276
define_feature!(5, UpfrontShutdownScript, [InitContext, NodeContext],
263-
"Feature flags for `option_upfront_shutdown_script`.");
277+
"Feature flags for `option_upfront_shutdown_script`.", set_supports_upfront_shutdown_script,
278+
set_requires_upfront_shutdown_script);
264279
define_feature!(7, GossipQueries, [InitContext, NodeContext],
265-
"Feature flags for `gossip_queries`.");
280+
"Feature flags for `gossip_queries`.", set_supports_gossip_queries, set_requires_gossip_queries);
266281
define_feature!(9, VariableLengthOnion, [InitContext, NodeContext, InvoiceContext],
267-
"Feature flags for `var_onion_optin`.");
282+
"Feature flags for `var_onion_optin`.", set_supports_variable_length_onion,
283+
set_requires_variable_length_onion);
268284
define_feature!(13, StaticRemoteKey, [InitContext, NodeContext],
269-
"Feature flags for `option_static_remotekey`.");
285+
"Feature flags for `option_static_remotekey`.", set_supports_static_remote_key,
286+
set_requires_static_remote_key);
270287
define_feature!(15, PaymentSecret, [InitContext, NodeContext, InvoiceContext],
271-
"Feature flags for `payment_secret`.");
288+
"Feature flags for `payment_secret`.", set_supports_payment_secret, set_requires_payment_secret);
272289
define_feature!(17, BasicMPP, [InitContext, NodeContext, InvoiceContext],
273-
"Feature flags for `basic_mpp`.");
290+
"Feature flags for `basic_mpp`.", set_supports_basic_mpp, set_requires_basic_mpp);
274291
define_feature!(27, ShutdownAnySegwit, [InitContext, NodeContext],
275-
"Feature flags for `opt_shutdown_anysegwit`.");
292+
"Feature flags for `opt_shutdown_anysegwit`.", set_supports_shutdown_any_segwit,
293+
set_requires_shutdown_any_segwit);
276294

277295
#[cfg(test)]
278296
define_context!(TestingContext {
@@ -296,7 +314,8 @@ mod sealed {
296314

297315
#[cfg(test)]
298316
define_feature!(23, UnknownFeature, [TestingContext],
299-
"Feature flags for an unknown feature used in testing.");
317+
"Feature flags for an unknown feature used in testing.", set_supports_unknown_feature,
318+
set_requires_unknown_feature);
300319
}
301320

302321
/// Tracks the set of features which a node implements, templated by the context in which it

0 commit comments

Comments
 (0)