Skip to main content

tree_table/args/
args_tree_extend.rs

1use alloc::string::String;
2use alloc::vec;
3use alloc::vec::Vec;
4
5use crate::Val;
6use crate::statics::default_emit_event_for_api;
7use crate::statics::default_inherit;
8use crate::statics::default_save_selection_for_api;
9use crate::statics::default_undo_for_api;
10#[cfg(feature = "serde")]
11use crate::statics::get_true;
12
13#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
14#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16#[derive(Debug, Default, Clone, Copy, PartialEq)]
17pub enum EmptyIdHandling {
18    #[default]
19    New,
20    Error,
21    Ignore,
22}
23
24#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
25#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
26#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
27#[derive(Debug, Default, Clone, Copy, PartialEq)]
28pub enum DuplicateIdHandling {
29    #[default]
30    Rename,
31    Error,
32}
33
34#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
35#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
36#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
37#[derive(Debug, Default, Clone, Copy, PartialEq)]
38pub enum CycleHandling {
39    #[default]
40    Ignore,
41    Clear,
42    Error,
43    Skip,
44    OnlyPrior,
45}
46
47/// For tree_extend functions.
48/// Row containing:
49/// - iid
50/// - par
51/// - vals of Vec<(String, Val)>
52#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
53#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
54#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
55#[derive(Debug, Clone, PartialEq)]
56pub struct TreeExtendRow {
57    #[cfg_attr(feature = "serde", serde(default))]
58    pub iid: String,
59    #[cfg_attr(feature = "serde", serde(default))]
60    pub par: String,
61    pub val: Option<Val>,
62    pub vals: Option<Vec<(String, Val)>>,
63    #[cfg_attr(feature = "serde", serde(default = "get_true"))]
64    pub open: bool,
65    pub dim: Option<u64>,
66}
67
68/// For tree_extend functions.
69/// Uses rows containing:
70/// - iid
71/// - par
72/// - vals of Vec<(String, Val)>
73#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
74#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
75#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
76#[derive(Debug, Clone, PartialEq)]
77pub struct TreeExtendArgs {
78    pub rows: Vec<TreeExtendRow>,
79    #[cfg_attr(feature = "serde", serde(default = "default_inherit"))]
80    pub inherit: String,
81    #[cfg_attr(feature = "serde", serde(default))]
82    pub select: bool,
83    #[cfg_attr(feature = "serde", serde(default = "default_emit_event_for_api"))]
84    pub emit: bool,
85    #[cfg_attr(feature = "serde", serde(default = "default_undo_for_api"))]
86    pub undo: bool,
87    #[cfg_attr(feature = "serde", serde(default))]
88    pub empty_ids: EmptyIdHandling,
89    #[cfg_attr(feature = "serde", serde(default))]
90    pub duplicate_ids: DuplicateIdHandling,
91    #[cfg_attr(feature = "serde", serde(default))]
92    pub cycles: CycleHandling,
93    #[cfg_attr(feature = "serde", serde(default = "default_save_selection_for_api"))]
94    pub save_selection: bool,
95}
96
97impl Default for TreeExtendArgs {
98    fn default() -> Self {
99        TreeExtendArgs {
100            rows: vec![],
101            inherit: default_inherit(),
102            select: false,
103            emit: default_emit_event_for_api(),
104            undo: default_undo_for_api(),
105            empty_ids: EmptyIdHandling::default(),
106            duplicate_ids: DuplicateIdHandling::default(),
107            cycles: CycleHandling::default(),
108            save_selection: default_save_selection_for_api(),
109        }
110    }
111}