Self::default()
}
- fn from_format(format: &Format) -> Self {
- let f = format.decode();
- let mut map = Self::new();
- for relabel in &format.relabels {
- let value = match relabel.to.trim().parse::<f64>().ok() {
- Some(to) if format.try_strings_as_numbers => Datum::Number(Some(to)),
- Some(to) => Datum::String(
- Datum::<String>::Number(Some(to))
- .display(f)
- .with_stretch()
- .to_string(),
- ),
- None => Datum::String(relabel.to.clone()),
- };
- map.0.insert(OrderedFloat(relabel.from), value);
- }
- map
- }
-
- fn from_string_format(string_format: &StringFormat) -> Self {
- let mut map = Self::new();
- for relabel in &string_format.relabels {
- map.0.insert(
- OrderedFloat(relabel.from),
- Datum::String(relabel.to.clone()),
- );
- }
- map
- }
-
fn apply(&self, data: &mut Vec<Datum<String>>) {
for value in data {
if let Datum::Number(Some(number)) = value
(Vec::new(), Vec::new())
};
if let Some(format) = &self.format {
- Map::from_format(format).apply(&mut data);
+ format.mapping().apply(&mut data);
} else if let Some(string_format) = &self.string_format {
- Map::from_string_format(string_format).apply(&mut data);
+ string_format.mapping().apply(&mut data);
};
if let Some(label_series) = label_series {
let format = self.format.as_ref().map_or(F8_0, |f| f.decode());
};
Map::from_vmes(&self.value_map).apply(&mut values);
if let Some(format) = &self.format {
- Map::from_format(format).apply(&mut values);
+ format.mapping().apply(&mut values);
} else if let Some(string_format) = &self.string_format {
- Map::from_string_format(string_format).apply(&mut values);
+ string_format.mapping().apply(&mut values);
};
series.insert(
&self.id,
affixes: Vec<Affix>,
}
+impl StringFormat {
+ fn mapping(&self) -> Map {
+ Map(self
+ .relabels
+ .iter()
+ .map(|relabel| {
+ (
+ OrderedFloat(relabel.from),
+ Datum::String(relabel.to.clone()),
+ )
+ })
+ .collect())
+ }
+}
+
#[derive(Deserialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
struct Format {
}
impl Format {
+ fn mapping(&self) -> Map {
+ let format = self.decode();
+ Map(self
+ .relabels
+ .iter()
+ .map(|relabel| {
+ let value = match relabel.to.trim().parse::<f64>().ok() {
+ Some(to) if self.try_strings_as_numbers => Datum::Number(Some(to)),
+ Some(to) => Datum::String(
+ Datum::<String>::Number(Some(to))
+ .display(format)
+ .with_stretch()
+ .to_string(),
+ ),
+ None => Datum::String(relabel.to.clone()),
+ };
+ (OrderedFloat(relabel.from), value)
+ })
+ .collect())
+ }
+
fn decode(&self) -> crate::format::Format {
if self.base_format.is_some() {
SignificantDateTimeFormat::from(self).decode()