1use crate::record::create_record_type;
4use crate::types::{Fields, Type};
5use lazy_static::lazy_static;
6
7static SCALAR_FIELDS: [(&str, Type); 12] = [
8 ("start.year", Type::Short),
9 ("start.month", Type::Short),
10 ("start.day", Type::Short),
11 ("start.hour", Type::Short),
12 ("start.minute", Type::Short),
13 ("start.second", Type::Double),
14 ("end.year", Type::Short),
15 ("end.month", Type::Short),
16 ("end.day", Type::Short),
17 ("end.hour", Type::Short),
18 ("end.minute", Type::Short),
19 ("end.second", Type::Double),
20];
21
22static SCALAR_FIELDS_OPT: [(&str, Type); 0] = [];
23
24static VECTOR_FIELDS: [(&str, Type); 18] = [
25 ("stid", Type::Short),
26 ("channel", Type::Short),
27 ("nvec", Type::Short),
28 ("freq", Type::Float),
29 ("major.revision", Type::Short),
30 ("minor.revision", Type::Short),
31 ("program.id", Type::Short),
32 ("noise.mean", Type::Float),
33 ("noise.sd", Type::Float),
34 ("gsct", Type::Short),
35 ("v.min", Type::Float),
36 ("v.max", Type::Float),
37 ("p.min", Type::Float),
38 ("p.max", Type::Float),
39 ("w.min", Type::Float),
40 ("w.max", Type::Float),
41 ("ve.min", Type::Float),
42 ("ve.max", Type::Float),
43];
44
45static VECTOR_FIELDS_OPT: [(&str, Type); 13] = [
46 ("vector.mlat", Type::Float),
47 ("vector.mlon", Type::Float),
48 ("vector.kvect", Type::Float),
49 ("vector.stid", Type::Short),
50 ("vector.channel", Type::Short),
51 ("vector.index", Type::Int),
52 ("vector.vel.median", Type::Float),
53 ("vector.vel.sd", Type::Float),
54 ("vector.pwr.median", Type::Float),
55 ("vector.pwr.sd", Type::Float),
56 ("vector.wdt.median", Type::Float),
57 ("vector.wdt.sd", Type::Float),
58 ("vector.srng", Type::Float),
59];
60
61lazy_static! {
62 static ref MATCHED_VECS: Vec<Vec<&'static str>> = vec![
63 vec![
64 "stid",
65 "channel",
66 "nvec",
67 "freq",
68 "major.revision",
69 "minor.revision",
70 "program.id",
71 "noise.mean",
72 "noise.sd",
73 "gsct",
74 "v.min",
75 "v.max",
76 "p.min",
77 "p.max",
78 "w.min",
79 "w.max",
80 "ve.min",
81 "ve.max",
82 ],
83 vec![
84 "vector.mlat",
85 "vector.mlon",
86 "vector.kvect",
87 "vector.stid",
88 "vector.channel",
89 "vector.index",
90 "vector.vel.median",
91 "vector.vel.sd",
92 "vector.pwr.median",
93 "vector.pwr.sd",
94 "vector.wdt.median",
95 "vector.wdt.sd",
96 ],
97 ];
98 static ref GRID_FIELDS: Fields<'static> = Fields {
99 all_fields: {
100 let mut fields: Vec<&str> = vec![];
101 fields.extend(SCALAR_FIELDS.clone().into_iter().map(|x| x.0));
102 fields.extend(SCALAR_FIELDS_OPT.clone().into_iter().map(|x| x.0));
103 fields.extend(VECTOR_FIELDS.clone().into_iter().map(|x| x.0));
104 fields.extend(VECTOR_FIELDS_OPT.clone().into_iter().map(|x| x.0));
105 fields
106 },
107 scalars_required: SCALAR_FIELDS.to_vec(),
108 scalars_optional: SCALAR_FIELDS_OPT.to_vec(),
109 vectors_required: VECTOR_FIELDS.to_vec(),
110 vectors_optional: VECTOR_FIELDS_OPT.to_vec(),
111 vector_dim_groups: MATCHED_VECS.clone(),
112 };
113}
114
115create_record_type!(grid, GRID_FIELDS);