#[serde(rename = "@pattern")]
pub pattern: Option<u32>,
- #[serde(flatten)]
- pub symbol_style: SymbolStyle,
-
- #[serde(flatten)]
- pub stroke_style: StrokeStyle,
-
- #[serde(flatten)]
- pub label_style: LabelStyle,
-
- #[serde(default, rename = "$value")]
- pub children: Vec<Style>,
-}
-
-impl Style {
- /// Updates this style with the overrides in `override`.
- pub fn overridden_with(self, overrides: &Style) -> Self {
- Self {
- id: overrides.id.clone().or(self.id),
- color: overrides.color.or(self.color),
- color2: overrides.color2.or(self.color2),
- visible: overrides.visible.or(self.visible),
- padding: overrides.padding.or(self.padding),
- pattern: overrides.pattern.or(self.pattern),
- symbol_style: self.symbol_style.overridden_with(&overrides.symbol_style),
- stroke_style: self.stroke_style.overridden_with(&overrides.stroke_style),
- label_style: self.label_style.overridden_with(&overrides.label_style),
- children: self.children,
- }
- }
-}
-
-#[derive(Clone, Deserialize, Debug, Default)]
-#[serde(default, rename_all = "camelCase")]
-pub struct SymbolStyle {
#[serde(rename = "@symbol")]
pub symbol: Option<String>,
#[serde(rename = "@glyph-sides")]
- pub sides: Option<usize>,
+ pub symbol_sides: Option<usize>,
#[serde(rename = "@glyph-angle")]
- pub angle: Option<f64>,
+ pub symbol_angle: Option<f64>,
#[serde(rename = "@size")]
- pub size: Option<LocationLength>,
+ pub symbol_size: Option<LocationLength>,
#[serde(rename = "@glyph-aspect")]
- pub aspect: Option<f64>,
-}
-
-impl SymbolStyle {
- pub fn overridden_with(self, overrides: &Self) -> Self {
- Self {
- symbol: overrides.symbol.clone().or(self.symbol),
- sides: overrides.sides.or(self.sides),
- angle: overrides.angle.or(self.angle),
- size: overrides.size.clone().or(self.size),
- aspect: overrides.aspect.or(self.aspect),
- }
- }
-}
+ pub symbol_aspect: Option<f64>,
-#[derive(Clone, Deserialize, Default, Debug)]
-#[serde(default, rename_all = "camelCase")]
-pub struct StrokeStyle {
#[serde(rename = "@stroke-dasharray")]
- dasharray: Option<String>,
+ stroke_dasharray: Option<String>,
#[serde(rename = "@stroke-linecap")]
- linecap: Option<StrokeLinecap>,
+ stroke_linecap: Option<StrokeLinecap>,
#[serde(rename = "@stroke-width")]
- width: Option<Length>,
+ stroke_width: Option<Length>,
#[serde(rename = "@stroke-decoration")]
- decoration: Option<StrokeDecoration>,
-}
+ stroke_decoration: Option<StrokeDecoration>,
-impl StrokeStyle {
- pub fn overridden_with(self, overrides: &Self) -> Self {
- Self {
- dasharray: overrides.dasharray.clone().or(self.dasharray),
- linecap: overrides.linecap.or(self.linecap),
- width: overrides.width.or(self.width),
- decoration: overrides.decoration.or(self.decoration),
- }
- }
-}
-
-#[derive(Clone, Deserialize, Default, Debug)]
-#[serde(default, rename_all = "camelCase")]
-pub struct LabelStyle {
#[serde(rename = "@font-family")]
- family: Option<String>,
+ font_family: Option<String>,
#[serde(rename = "@font-size")]
- size: Option<LocationLengthRange>,
+ font_size: Option<LocationLengthRange>,
#[serde(rename = "@font-weight")]
weight: Option<FontWeight>,
#[serde(rename = "@font-style")]
- slant: Option<FontSlant>,
+ font_slant: Option<FontSlant>,
#[serde(rename = "@font-underline")]
- underline: Option<FontUnderline>,
+ font_underline: Option<FontUnderline>,
#[serde(rename = "@textAlignment")]
text_alignment: Option<TextAlignment>,
#[serde(rename = "@labelLocationVertical")]
#[serde(deserialize_with = "deserialize_vert_align")]
- vert_align: Option<VertAlign>,
-
- #[serde(rename = "@text-fit")]
- text_fit: Option<bool>,
+ label_vert_align: Option<VertAlign>,
#[serde(rename = "@ignoreNewLines")]
ignore_new_lines: Option<bool>,
#[serde(rename = "@labelInside")]
- placement: Option<LabelPlacement>,
+ label_placement: Option<LabelPlacement>,
+
+ #[serde(default, rename = "$value")]
+ pub children: Vec<Style>,
+
+ #[serde(rename = "@text-fit")]
+ text_fit: Option<bool>,
}
-impl LabelStyle {
- pub fn horz_align(&self) -> Option<HorzAlign> {
+impl Style {
+ /// Updates this style with the overrides in `override`.
+ pub fn overridden_with(self, overrides: &Style) -> Self {
+ Self {
+ id: overrides.id.clone().or(self.id),
+ color: overrides.color.or(self.color),
+ color2: overrides.color2.or(self.color2),
+ visible: overrides.visible.or(self.visible),
+ padding: overrides.padding.or(self.padding),
+ pattern: overrides.pattern.or(self.pattern),
+ symbol: overrides.symbol.clone().or(self.symbol),
+ symbol_sides: overrides.symbol_sides.or(self.symbol_sides),
+ symbol_angle: overrides.symbol_angle.or(self.symbol_angle),
+ symbol_size: overrides.symbol_size.clone().or(self.symbol_size),
+ symbol_aspect: overrides.symbol_aspect.or(self.symbol_aspect),
+ stroke_dasharray: overrides.stroke_dasharray.clone().or(self.stroke_dasharray),
+ stroke_linecap: overrides.stroke_linecap.or(self.stroke_linecap),
+ stroke_width: overrides.stroke_width.or(self.stroke_width),
+ stroke_decoration: overrides.stroke_decoration.or(self.stroke_decoration),
+ font_family: overrides.font_family.clone().or(self.font_family),
+ font_size: overrides.font_size.clone().or(self.font_size),
+ weight: overrides.weight.or(self.weight),
+ font_slant: overrides.font_slant.or(self.font_slant),
+ font_underline: overrides.font_underline.or(self.font_underline),
+ text_alignment: overrides.text_alignment.or(self.text_alignment),
+ label_vert_align: overrides.label_vert_align.or(self.label_vert_align),
+ decimal_offset: overrides.decimal_offset.or(self.decimal_offset),
+ ignore_new_lines: overrides.ignore_new_lines.or(self.ignore_new_lines),
+ label_placement: overrides.label_placement.or(self.label_placement),
+ text_fit: overrides.text_fit.or(self.text_fit),
+ children: self.children,
+ }
+ }
+
+ pub fn label_horz_align(&self) -> Option<HorzAlign> {
match self.text_alignment.unwrap_or_default() {
TextAlignment::Left => Some(HorzAlign::Left),
TextAlignment::Right => Some(HorzAlign::Right),
TextAlignment::Mixed => None,
}
}
-
- pub fn overridden_with(self, overrides: &Self) -> Self {
- Self {
- family: overrides.family.clone().or(self.family),
- size: overrides.size.clone().or(self.size),
- weight: overrides.weight.or(self.weight),
- slant: overrides.slant.or(self.slant),
- underline: overrides.underline.or(self.underline),
- text_alignment: overrides.text_alignment.or(self.text_alignment),
- vert_align: overrides.vert_align.or(self.vert_align),
- decimal_offset: overrides.decimal_offset.or(self.decimal_offset),
- text_fit: overrides.text_fit.or(self.text_fit),
- ignore_new_lines: overrides.ignore_new_lines.or(self.ignore_new_lines),
- placement: overrides.placement.or(self.placement),
- }
- }
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Deserialize)]