femtopb 0.4.2

A no-std, no-alloc set of tools for protobuf encoding and decoding
Documentation
use crate::{encoding, error, oneof};

#[inline]
#[cfg_attr(feature = "assert-no-panic", no_panic::no_panic)]
pub fn encode<'a, O>(value: &Option<O>, cursor: &mut &mut [u8])
where
    O: oneof::Oneof<'a>,
{
    if let Some(v) = value {
        v.encode(cursor);
    }
}

#[inline]
#[cfg_attr(feature = "assert-no-panic", no_panic::no_panic)]
pub fn encoded_len<'a, O>(value: &Option<O>) -> usize
where
    O: oneof::Oneof<'a>,
{
    if let Some(v) = value {
        v.encoded_len()
    } else {
        0
    }
}

#[inline]
#[cfg_attr(feature = "assert-no-panic", no_panic::no_panic)]
pub fn decode<'a, O>(
    tag: u32,
    wire_type: encoding::WireType,
    msg_buf: &'a [u8],
    cursor: &mut &'a [u8],
    field: &mut Option<O>,
) -> Result<(), error::DecodeError>
where
    O: oneof::Oneof<'a>,
{
    *field = Some(O::decode(tag, wire_type, msg_buf, cursor)?);
    Ok(())
}

#[inline]
#[cfg_attr(feature = "assert-no-panic", no_panic::no_panic)]
pub fn clear<'a, O>(value: &mut Option<O>)
where
    O: oneof::Oneof<'a>,
{
    *value = None;
}