micrortu_sdk/
getters_setters.rs

1use ie_base::IEBuf;
2use wasm_global_shared_data::ParseError;
3
4pub fn parse_port<T>(
5    source: &[IEBuf],
6    is_optional: bool,
7    min_size: u8,
8    max_size: Option<u8>,
9) -> Result<usize, ParseError> {
10    let mut len = 0;
11    if source.get(len).is_some() {
12        let err = ParseError::NotTerminated;
13        while source.get(len).ok_or(err)?.is_valid() {
14            len = len.wrapping_add(1);
15        }
16    }
17    if len == 0 && is_optional {
18        return Ok(0);
19    }
20    if len < min_size.into() {
21        return Err(ParseError::NotEnoughData);
22    }
23    if max_size.map_or(false, |m: u8| len > m as usize) {
24        return Err(ParseError::TooMuchData);
25    }
26
27    Ok(len)
28}