micrortu_sdk/
getters_setters.rs1use 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}