-impl_writeable_tlv_based!(ReceiveTlvs, {
- (12, payment_constraints, required),
- (65536, payment_secret, required),
-});
+ fn try_from(info: CounterpartyForwardingInfo) -> Result<Self, ()> {
+ let CounterpartyForwardingInfo {
+ fee_base_msat, fee_proportional_millionths, cltv_expiry_delta
+ } = info;
+
+ // Avoid exposing esoteric CLTV expiry deltas
+ let cltv_expiry_delta = match cltv_expiry_delta {
+ 0..=40 => 40,
+ 41..=80 => 80,
+ 81..=144 => 144,
+ 145..=216 => 216,
+ _ => return Err(()),
+ };
+
+ Ok(Self { cltv_expiry_delta, fee_proportional_millionths, fee_base_msat })
+ }
+}
+
+impl Writeable for ForwardTlvs {
+ fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
+ encode_tlv_stream!(w, {
+ (2, self.short_channel_id, required),
+ (10, self.payment_relay, required),
+ (12, self.payment_constraints, required),
+ (14, self.features, required)
+ });
+ Ok(())
+ }
+}
+
+impl Writeable for ReceiveTlvs {
+ fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
+ encode_tlv_stream!(w, {
+ (12, self.payment_constraints, required),
+ (65536, self.payment_secret, required)
+ });
+ Ok(())
+ }
+}