]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Marginally reduce allocations in `lightning-invoice`
authorMatt Corallo <git@bluematt.me>
Thu, 3 Oct 2024 16:54:14 +0000 (16:54 +0000)
committerMatt Corallo <git@bluematt.me>
Thu, 3 Oct 2024 17:26:01 +0000 (17:26 +0000)
In aa2f6b47df312f026213d0ceaaff20ffe955c377 we refactored
`lightning-invoice` de/serialization to use the new version of
`bech32`, but in order to keep the public API the same we
introduced one allocation we could have skipped.

Instead, here, we replace the public `Utf8Error` with
`FromUtf8Error` which contains the original data which failed
conversion, removing an allocation in the process.

lightning-invoice/src/de.rs
lightning-invoice/src/lib.rs

index 446fd5c71c0b3112018ebe7b15b9179ccd67f454..da43edc5b6b65dd91644a72dad5a0db921a37dfe 100644 (file)
@@ -1,3 +1,4 @@
+use alloc::string;
 #[cfg(feature = "std")]
 use std::error;
 #[cfg(not(feature = "std"))]
@@ -5,7 +6,6 @@ use core::convert::TryFrom;
 use core::fmt;
 use core::fmt::{Display, Formatter};
 use core::num::ParseIntError;
-use core::str;
 use core::str::FromStr;
 
 use bech32::primitives::decode::{CheckedHrpstring, CheckedHrpstringError};
@@ -613,7 +613,7 @@ impl FromBase32 for Description {
 
        fn from_base32(field_data: &[Fe32]) -> Result<Description, Bolt11ParseError> {
                let bytes = Vec::<u8>::from_base32(field_data)?;
-               let description = String::from(str::from_utf8(&bytes)?);
+               let description = String::from_utf8(bytes)?;
                Ok(Description::new(description).expect(
                        "Max len is 639=floor(1023*5/8) since the len field is only 10bits long"
                ))
@@ -824,7 +824,7 @@ macro_rules! from_error {
 
 from_error!(Bolt11ParseError::MalformedSignature, bitcoin::secp256k1::Error);
 from_error!(Bolt11ParseError::ParseAmountError, ParseIntError);
-from_error!(Bolt11ParseError::DescriptionDecodeError, str::Utf8Error);
+from_error!(Bolt11ParseError::DescriptionDecodeError, string::FromUtf8Error);
 
 impl From<CheckedHrpstringError> for Bolt11ParseError {
        fn from(e: CheckedHrpstringError) -> Self {
index f696e3545f94e964cd792d54eb28cb192e7275bb..8baedbe26cdd729997fa1a90b8aca5ea1ebe14fb 100644 (file)
@@ -51,7 +51,7 @@ use core::num::ParseIntError;
 use core::ops::Deref;
 use core::slice::Iter;
 use core::time::Duration;
-use core::str;
+use alloc::string;
 
 #[cfg(feature = "serde")]
 use serde::{Deserialize, Deserializer,Serialize, Serializer, de::Error};
@@ -98,7 +98,7 @@ pub enum Bolt11ParseError {
        MalformedHRP,
        TooShortDataPart,
        UnexpectedEndOfTaggedFields,
-       DescriptionDecodeError(str::Utf8Error),
+       DescriptionDecodeError(string::FromUtf8Error),
        PaddingError,
        IntegerOverflowError,
        InvalidSegWitProgramLength,