pride_overlay/flags/
mod.rs

1use crate::Colour;
2
3#[cfg(target_arch = "wasm32")]
4pub(crate) mod wasm;
5
6mod data;
7pub use data::PresetFlag;
8
9mod svg;
10pub use svg::{Svg, SvgData, SvgScaleMode};
11
12/// Get information about a pride flag.
13pub trait FlagData {
14    fn name(&self) -> &str;
15    fn colours(&self) -> &[Colour];
16    fn svg(&self) -> Option<&dyn SvgData>;
17}
18
19/// A pride flag.
20#[derive(bon::Builder, Clone, Copy, Default)]
21#[builder(
22    const,
23    builder_type(doc {
24        /// Builder for the [Flag] struct.
25    })
26)]
27pub struct Flag<'a> {
28    #[builder(start_fn)]
29    /// Name of the flag.
30    pub(crate) name: &'a str,
31    /// Colours that make up the flag.
32    #[builder(start_fn)]
33    pub(crate) colours: &'a [Colour],
34    /// Optional SVG representation of the flag.
35    pub(crate) svg: Option<svg::Svg<'a>>,
36}
37
38impl<'a> FlagData for Flag<'a> {
39    fn name(&self) -> &str {
40        self.name
41    }
42
43    fn colours(&self) -> &[Colour] {
44        self.colours
45    }
46
47    fn svg(&self) -> Option<&dyn SvgData> {
48        self.svg.as_ref().map(|svg| svg as &dyn SvgData)
49    }
50}