ripgrib/src/grib1/is.rs
2023-01-22 11:59:31 +08:00

29 lines
611 B
Rust

use nom::{
bytes::complete::tag,
number::{complete::be_u24, complete::u8},
sequence::{preceded, tuple},
IResult,
};
#[derive(Debug, Default)]
pub struct IS {
total_length: usize,
version_number: u8,
}
pub fn is_parser(input: &[u8]) -> IResult<&[u8], IS> {
let grib = tag([71, 82, 73, 66]);
let total_length = be_u24;
let editon = u8;
let (input, (len, edition_number)) = preceded(grib, tuple((total_length, editon)))(input)?;
Ok((
input,
IS {
total_length: len as usize,
version_number: edition_number,
},
))
}