pds section parser
This commit is contained in:
parent
71464b0e6e
commit
4a92281426
71
src/libs.rs
Normal file
71
src/libs.rs
Normal file
@ -0,0 +1,71 @@
|
||||
use chrono::prelude::*;
|
||||
use chrono::{Duration, TimeZone};
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::number::complete::{u24, u8};
|
||||
use nom::number::Endianness::Little;
|
||||
use nom::sequence::{preceded, tuple};
|
||||
use nom::IResult;
|
||||
|
||||
struct IS {
|
||||
total_length: usize,
|
||||
version_number: u8,
|
||||
}
|
||||
fn isParser(input: &[u8]) -> IResult<&[u8], IS> {
|
||||
let grib = tag([]);
|
||||
let total_length = u24(Little);
|
||||
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,
|
||||
},
|
||||
))
|
||||
}
|
||||
|
||||
struct PDS {
|
||||
length: usize,
|
||||
center_identification: Center,
|
||||
generating_process_id: u8,
|
||||
grid_identification: GridID,
|
||||
pub gds: bool,
|
||||
pub bms: bool,
|
||||
units: u8,
|
||||
level_type_and_value: String,
|
||||
datetime: DateTime<Utc>,
|
||||
forecast_time_unit: Duration,
|
||||
time_range: usize,
|
||||
average_number: u16,
|
||||
missing_number: u8,
|
||||
decimal_scale: u16,
|
||||
}
|
||||
|
||||
enum Center {
|
||||
WMC(u8),
|
||||
RSMC(u8),
|
||||
RAFC(u8),
|
||||
INPE(u8),
|
||||
NMC(u8),
|
||||
NCAR(u8),
|
||||
Other(u8),
|
||||
}
|
||||
|
||||
enum GridID {
|
||||
Lambert,
|
||||
Mocator,
|
||||
}
|
||||
|
||||
fn pdsParser(input: &[u8]) -> IResult<&[u8], IS> {
|
||||
let length = u24(Little);
|
||||
}
|
||||
|
||||
struct GDS {
|
||||
length: usize,
|
||||
nv: u8,
|
||||
pv_or_pl: u8,
|
||||
r_type: u8,
|
||||
description: u8,
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user