+impl<D: tb::Bool, H: tb::Bool, T: tb::Bool, S: tb::Bool> InvoiceBuilder<D, H, T, tb::False, S> {
+ /// Sets `min_final_cltv_expiry`.
+ pub fn min_final_cltv_expiry(mut self, min_final_cltv_expiry: u64) -> InvoiceBuilder<D, H, T, tb::True, S> {
+ self.tagged_fields.push(TaggedField::MinFinalCltvExpiry(MinFinalCltvExpiry(min_final_cltv_expiry)));
+ self.set_flags()
+ }
+}
+
+impl<D: tb::Bool, H: tb::Bool, T: tb::Bool, C: tb::Bool> InvoiceBuilder<D, H, T, C, tb::False> {
+ /// Sets the payment secret and relevant features.
+ pub fn payment_secret(mut self, payment_secret: PaymentSecret) -> InvoiceBuilder<D, H, T, C, tb::True> {
+ let features = InvoiceFeatures::empty()
+ .set_variable_length_onion_required()
+ .set_payment_secret_required();
+ self.tagged_fields.push(TaggedField::PaymentSecret(payment_secret));
+ self.tagged_fields.push(TaggedField::Features(features));
+ self.set_flags()
+ }
+}
+
+impl<D: tb::Bool, H: tb::Bool, T: tb::Bool, C: tb::Bool> InvoiceBuilder<D, H, T, C, tb::True> {
+ /// Sets the `basic_mpp` feature as optional.
+ pub fn basic_mpp(mut self) -> Self {
+ self.tagged_fields = self.tagged_fields
+ .drain(..)
+ .map(|field| match field {
+ TaggedField::Features(f) => TaggedField::Features(f.set_basic_mpp_optional()),
+ _ => field,
+ })
+ .collect();
+ self
+ }
+}
+
+impl<S: tb::Bool> InvoiceBuilder<tb::True, tb::True, tb::True, tb::True, S> {