Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ff682a4 authored by Martin Geisler's avatar Martin Geisler Committed by Automerger Merge Worker
Browse files

pdl: Propagate child errors from Packet::new am: ff269cb5

parents be908fa5 ff269cb5
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -565,9 +565,9 @@ fn generate_packet_decl(
            )*

            impl TryFrom<#top_level_packet> for #id_packet {
                type Error = TryFromError;
                fn try_from(packet: #top_level_packet) -> std::result::Result<#id_packet, TryFromError> {
                    #id_packet::new(packet.#top_level_id_lower).map_err(TryFromError)
                type Error = Error;
                fn try_from(packet: #top_level_packet) -> Result<#id_packet> {
                    #id_packet::new(packet.#top_level_id_lower)
                }
            }
        }
@@ -634,17 +634,19 @@ fn generate_packet_decl(

            fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
                let data = #top_level_data::parse_inner(&mut bytes)?;
                Ok(Self::new(Arc::new(data)).unwrap())
                Self::new(Arc::new(data))
            }

            #specialize

            fn new(#top_level_id_lower: Arc<#top_level_data>)
                   -> std::result::Result<Self, &'static str> {
            fn new(#top_level_id_lower: Arc<#top_level_data>) -> Result<Self> {
                #(
                    let #parent_shifted_lower_ids = match &#parent_lower_ids.child {
                        #parent_data_child::#parent_shifted_ids(value) => value.clone(),
                        _ => return Err("Could not parse data, wrong child type"),
                        _ => return Err(Error::InvalidChildError {
                            expected: stringify!(#parent_data_child::#parent_shifted_ids),
                            actual: format!("{:?}", &#parent_lower_ids.child),
                        }),
                    };
                )*
                Ok(Self { #(#parent_lower_ids),* })
+2 −6
Original line number Diff line number Diff line
@@ -82,15 +82,11 @@ pub fn generate(path: &Path) -> String {
            ImpossibleStructError,
            #[error("when parsing field {obj}.{field}, {value} is not a valid {type_} value")]
            InvalidEnumValueError { obj: String, field: String, value: u64, type_: String },
            #[error("expected child {expected}, got {actual}")]
            InvalidChildError { expected: &'static str, actual: String },
        }
    });

    code.push_str(&quote_block! {
        #[derive(Debug, Error)]
        #[error("{0}")]
        pub struct TryFromError(&'static str);
    });

    code.push_str(&quote_block! {
        pub trait Packet {
            fn to_bytes(self) -> Bytes;
+2 −4
Original line number Diff line number Diff line
@@ -38,12 +38,10 @@ pub enum Error {
    ImpossibleStructError,
    #[error("when parsing field {obj}.{field}, {value} is not a valid {type_} value")]
    InvalidEnumValueError { obj: String, field: String, value: u64, type_: String },
    #[error("expected child {expected}, got {actual}")]
    InvalidChildError { expected: &'static str, actual: String },
}

#[derive(Debug, Error)]
#[error("{0}")]
pub struct TryFromError(&'static str);

pub trait Packet {
    fn to_bytes(self) -> Bytes;
    fn to_vec(self) -> Vec<u8>;
+2 −4
Original line number Diff line number Diff line
@@ -38,12 +38,10 @@ pub enum Error {
    ImpossibleStructError,
    #[error("when parsing field {obj}.{field}, {value} is not a valid {type_} value")]
    InvalidEnumValueError { obj: String, field: String, value: u64, type_: String },
    #[error("expected child {expected}, got {actual}")]
    InvalidChildError { expected: &'static str, actual: String },
}

#[derive(Debug, Error)]
#[error("{0}")]
pub struct TryFromError(&'static str);

pub trait Packet {
    fn to_bytes(self) -> Bytes;
    fn to_vec(self) -> Vec<u8>;
+4 −6
Original line number Diff line number Diff line
@@ -38,12 +38,10 @@ pub enum Error {
    ImpossibleStructError,
    #[error("when parsing field {obj}.{field}, {value} is not a valid {type_} value")]
    InvalidEnumValueError { obj: String, field: String, value: u64, type_: String },
    #[error("expected child {expected}, got {actual}")]
    InvalidChildError { expected: &'static str, actual: String },
}

#[derive(Debug, Error)]
#[error("{0}")]
pub struct TryFromError(&'static str);

pub trait Packet {
    fn to_bytes(self) -> Bytes;
    fn to_vec(self) -> Vec<u8>;
@@ -181,9 +179,9 @@ impl Bar {
    }
    fn parse_inner(mut bytes: &mut Cell<&[u8]>) -> Result<Self> {
        let data = BarData::parse_inner(&mut bytes)?;
        Ok(Self::new(Arc::new(data)).unwrap())
        Self::new(Arc::new(data))
    }
    fn new(bar: Arc<BarData>) -> std::result::Result<Self, &'static str> {
    fn new(bar: Arc<BarData>) -> Result<Self> {
        Ok(Self { bar })
    }
    pub fn get_x(&self) -> &[Foo; 5] {
Loading