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