use grib_template_derive::{Dump, TryFromSlice, WriteToBuffer};
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_0 {
pub earth: param_set::EarthShape,
pub lat_lon: param_set::LatLonGrid,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_1 {
pub earth: param_set::EarthShape,
pub lat_lon: param_set::LatLonGrid,
pub rotation: param_set::Rotation,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_2 {
pub earth: param_set::EarthShape,
pub lat_lon: param_set::LatLonGrid,
pub stretching: param_set::Stretching,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_3 {
pub earth: param_set::EarthShape,
pub lat_lon: param_set::LatLonGrid,
pub rotation: param_set::Rotation,
pub stretching: param_set::Stretching,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_10 {
pub earth_shape: param_set::EarthShape,
pub ni: u32,
pub nj: u32,
pub first_point_lat: i32,
pub first_point_lon: u32,
pub resolution_and_component_flags: param_set::ResolutionAndComponentFlags,
pub lad: i32,
pub last_point_lat: i32,
pub last_point_lon: u32,
pub scanning_mode: param_set::ScanningMode,
pub orientation: u32,
pub di: u32,
pub dj: u32,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_20 {
pub earth_shape: param_set::EarthShape,
pub ni: u32,
pub nj: u32,
pub first_point_lat: i32,
pub first_point_lon: u32,
pub resolution_and_component_flags: param_set::ResolutionAndComponentFlags,
pub lad: i32,
pub lov: i32,
pub dx: u32,
pub dy: u32,
pub projection_centre: param_set::ProjectionCentreFlag,
pub scanning_mode: param_set::ScanningMode,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_30 {
pub earth_shape: param_set::EarthShape,
pub ni: u32,
pub nj: u32,
pub first_point_lat: i32,
pub first_point_lon: u32,
pub resolution_and_component_flags: param_set::ResolutionAndComponentFlags,
pub lad: i32,
pub lov: u32,
pub dx: u32,
pub dy: u32,
pub projection_centre: param_set::ProjectionCentreFlag,
pub scanning_mode: param_set::ScanningMode,
pub latin1: i32,
pub latin2: i32,
pub south_pole_lat: i32,
pub south_pole_lon: u32,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_40 {
pub earth: param_set::EarthShape,
pub gaussian: param_set::GaussianGrid,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_41 {
pub earth: param_set::EarthShape,
pub gaussian: param_set::GaussianGrid,
pub rotation: param_set::Rotation,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_42 {
pub earth: param_set::EarthShape,
pub gaussian: param_set::GaussianGrid,
pub stretching: param_set::Stretching,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_43 {
pub earth: param_set::EarthShape,
pub gaussian: param_set::GaussianGrid,
pub rotation: param_set::Rotation,
pub stretching: param_set::Stretching,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Template3_101 {
pub earth_shape: u8,
#[grib_template(num_octets = 3)]
pub grid_num: u32,
pub ref_grid_num: u8,
pub uuid: [u8; 16],
}
pub(crate) mod param_set {
use grib_template_derive::{Dump, TryFromSlice, WriteToBuffer};
use super::super::template::param_set::ScaledValue;
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct EarthShape {
pub shape: u8,
#[dump(doc(
scale_factor = "Scale factor of radius of spherical Earth.",
scaled_value = "Scaled value of radius of spherical Earth.",
))]
pub spherical_earth_radius: ScaledValue<u8, u32>,
#[dump(doc(
scale_factor = "Scale factor of major axis of oblate spheroid Earth.",
scaled_value = "Scaled value of major axis of oblate spheroid Earth.",
))]
pub major_axis: ScaledValue<u8, u32>,
#[dump(doc(
scale_factor = "Scale factor of minor axis of oblate spheroid Earth.",
scaled_value = "Scaled value of minor axis of oblate spheroid Earth.",
))]
pub minor_axis: ScaledValue<u8, u32>,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct LatLonGrid {
pub grid: Grid,
pub i_direction_inc: u32,
pub j_direction_inc: u32,
pub scanning_mode: ScanningMode,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct GaussianGrid {
pub grid: Grid,
pub i_direction_inc: u32,
pub n: u32,
pub scanning_mode: ScanningMode,
}
#[derive(Debug, PartialEq, Eq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Grid {
pub ni: u32,
pub nj: u32,
pub initial_production_domain_basic_angle: u32,
pub basic_angle_subdivisions: u32,
pub first_point_lat: i32,
pub first_point_lon: u32,
pub resolution_and_component_flags: ResolutionAndComponentFlags,
pub last_point_lat: i32,
pub last_point_lon: u32,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, TryFromSlice, WriteToBuffer, Dump)]
pub struct ProjectionCentreFlag(
).
pub u8,
);
#[derive(Debug, PartialEq, Eq, Clone, Copy, TryFromSlice, WriteToBuffer, Dump)]
pub struct ResolutionAndComponentFlags(
).
pub u8,
);
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Rotation {
pub south_pole_lat: i32,
pub south_pole_lon: u32,
pub rot_angle: f32,
}
#[derive(Debug, PartialEq, Clone, TryFromSlice, WriteToBuffer, Dump)]
pub struct Stretching {
pub pole_lat: i32,
pub pole_lon: u32,
pub factor: u32,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, TryFromSlice, WriteToBuffer, Dump)]
pub struct ScanningMode(
).
pub u8,
);
}