Skip to main content

rsiot/components/cmp_svg/
config.rs

1use std::collections::HashMap;
2
3use crate::message::MsgDataBound;
4
5// ANCHOR: Config
6/// Конфигурация компонента cmp_svg
7#[derive(Clone)]
8pub struct Config<TMsg>
9where
10    TMsg: MsgDataBound,
11{
12    /// Файл с документом SVG
13    ///
14    /// Можно прочитать:
15    ///
16    /// ```rs
17    /// include_str!("../files/input.svg")
18    /// ```
19    pub file: &'static str,
20
21    /// Функция преобразования входящих сообщений в изменения SVG
22    pub fn_input: fn(&TMsg) -> Vec<SvgChange>,
23
24    /// Функция преобразования изменённого файла SVG в исходящее сообщение.
25    ///
26    /// Файл передаётся как `Vec<u8>`
27    pub fn_output: fn(&[u8]) -> TMsg,
28}
29// ANCHOR: Config
30
31// ANCHOR: SvgChange
32/// Изменения элемента SVG
33#[derive(Clone, Debug)]
34pub struct SvgChange {
35    /// Идентификатор элемента SVG
36    pub id: &'static str,
37
38    /// Вектор изменений
39    pub change: Vec<SvgChangeType>,
40
41    /// Изменение вложенных элементов TODO
42    pub change_childs: Option<HashMap<String, Vec<SvgChangeType>>>,
43}
44// ANCHOR: SvgChange
45
46// ANCHOR: SvgChangeType
47/// Типы изменений элемента SVG
48#[derive(Clone, Debug)]
49pub enum SvgChangeType {
50    /// Изменение атрибута
51    ChangeAttr {
52        /// Название атрибута
53        attr_name: &'static str,
54        /// Новое значение атрибута
55        new_value: String,
56    },
57
58    /// Изменение одного параметра в атрибуте style
59    ChangeAttrStyle {
60        /// Параметр стиля
61        attr_style_name: &'static str,
62        /// Новое значение параметра стиля
63        new_value: String,
64    },
65
66    /// Изменение текста элемента
67    ChangeText {
68        /// Новое значение текста
69        text: String,
70    },
71}
72// ANCHOR: SvgChangeType