use grib_template_derive::{Dump, TryFromSlice, WriteToBuffer};
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_0 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_1 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
pub matrix_bitmap_present: u8,
pub num_encoded_vals: u32,
pub num_dim_1: u16,
pub num_dim_2: u16,
pub dim_1_coord_def: u8,
pub num_dim_1_coeffs: u8,
pub dim_2_coord_def: u8,
pub num_dim_2_coeffs: u8,
pub dim_1_significance: u8,
pub dim_2_significance: u8,
#[grib_template(len = "num_dim_1_coeffs")]
pub dim_1_coeffs: Vec<f32>,
#[grib_template(len = "num_dim_2_coeffs")]
pub dim_2_coeffs: Vec<f32>,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_2 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
pub complex: param_set::ComplexPacking,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_3 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
pub complex: param_set::ComplexPacking,
pub spatial_diff_order: u8,
pub num_extra_desc_octets: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_4 {
pub precision: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_40 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
pub compression_type: u8,
pub compression_ratio: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_41 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_42 {
pub simple: param_set::SimplePacking,
pub orig_field_type: u8,
pub mask: u8,
pub block_size: u8,
pub ref_sample_interval: u16,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_50 {
pub simple: param_set::SimplePacking,
pub real_part_zero: f32,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_51 {
pub simple: param_set::SimplePacking,
pub p: i32,
pub js: u16,
pub ks: u16,
pub ms: u16,
pub ts: u32,
pub precision: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_53 {
pub simple: param_set::SimplePacking,
pub bi_fourier_subtrunc_type: u8,
pub bi_fourier_pack_mode: u8,
pub p: i32,
pub ns: u16,
pub ms: u16,
pub ts: u32,
pub precision: u8,
}
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_61 {
pub simple: param_set::SimplePacking,
pub preprocess_param: f32,
}
#[derive(Debug, PartialEq, Eq, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template5_200 {
pub num_bits: u8,
pub max_val: u16,
pub max_level: u16,
pub dec: u8,
#[grib_template(len = "max_level")]
pub level_vals: Vec<u16>,
}
pub(crate) mod param_set {
use grib_template_derive::{Dump, TryFromSlice, WriteToBuffer};
#[derive(Debug, PartialEq, TryFromSlice, WriteToBuffer, Dump)]
pub struct SimplePacking {
pub ref_val: f32,
pub exp: i16,
pub dec: i16,
pub num_bits: u8,
}
impl SimplePacking {
pub(crate) fn zero_bit_reference_value(&self) -> f32 {
self.ref_val * 10_f32.powi(-i32::from(self.dec))
}
}
#[derive(Debug, PartialEq, Eq, TryFromSlice, WriteToBuffer, Dump)]
pub struct ComplexPacking {
pub group_splitting_method: u8,
pub missing_value_management: u8,
pub primary_missing_value: u32,
pub secondary_missing_value: u32,
pub num_groups: u32,
pub group_width_ref: u8,
pub num_group_width_bits: u8,
pub group_len_ref: u32,
pub group_len_inc: u8,
pub group_len_last: u32,
pub num_group_len_bits: u8,
}
}