Skip to content

Commit 5fd4f77

Browse files
committed
Add [u8; N] impl, more tests
1 parent 38499ff commit 5fd4f77

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

lightning-invoice/src/de.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@ impl FromBase32 for Vec<u8> {
4646
}
4747
}
4848

49+
impl<const N: usize> FromBase32 for [u8; N] {
50+
type Err = CheckedHrpstringError;
51+
52+
fn from_base32(data: &[Fe32]) -> Result<Self, Self::Err> {
53+
Ok(data.iter().copied().fes_to_bytes().collect::<Vec<_>>().try_into().unwrap())
54+
}
55+
}
56+
4957
impl FromBase32 for PaymentSecret {
5058
type Err = CheckedHrpstringError;
5159

lightning-invoice/src/test_ser_de.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ fn vec_u8() {
4848
ser_de_test_len(vec![255, 254, 253, 252, 251, 250, 249, 248, 247, 246], "lll0ml8mltul3alk");
4949
}
5050

51+
#[test]
52+
fn array_u8() {
53+
ser_de_test_len([0], "qq");
54+
ser_de_test_len([255], "lu");
55+
ser_de_test_len([0, 1], "qqqs");
56+
ser_de_test_len([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "qqqsyqcyq5rqwzqf");
57+
ser_de_test_len([255, 254, 253, 252, 251, 250, 249, 248, 247, 246], "lll0ml8mltul3alk");
58+
}
59+
5160
#[test]
5261
fn payment_secret() {
5362
let payment_secret = PaymentSecret([7; 32]);
@@ -66,8 +75,24 @@ fn positive_timestamp() {
6675
fn bolt11_invoice_features() {
6776
use crate::Bolt11InvoiceFeatures;
6877

69-
let features = Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5, 42, 100, 101]);
70-
ser_de_test_len(features, "x2ep2q5zqxqsp");
78+
// Test few values, lengths, and paddings
79+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5, 42, 100, 101]), "x2ep2q5zqxqsp");
80+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![]), "");
81+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0]), "");
82+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1]), "p");
83+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![31]), "l");
84+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100]), "ry");
85+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![255]), "8l");
86+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1]), "p");
87+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2]), "sp");
88+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3]), "xqsp");
89+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4]), "zqxqsp");
90+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![1, 2, 3, 4, 5]), "5zqxqsp");
91+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![255, 254, 253, 252, 251]), "l070mlhl");
92+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100, 0]), "ry");
93+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![100, 0, 0, 0]), "ry");
94+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0, 100]), "eqq");
95+
ser_de_test_len(Bolt11InvoiceFeatures::from_le_bytes(vec![0, 0, 0, 100]), "pjqqqqq");
7196
}
7297

7398
#[test]

0 commit comments

Comments
 (0)