tree_table/args/
args_sort.rs1use crate::SpanKey;
2use crate::Val;
3use crate::statics::default_emit_event_for_api;
4use crate::statics::default_save_selection_for_api;
5use crate::statics::default_undo_for_api;
6use alloc::vec;
7use alloc::vec::Vec;
8
9#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
10#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12#[derive(Debug, Default, Clone, Copy, PartialEq)]
13pub enum SortKey {
14 #[default]
15 Natural,
16 X,
17 Date,
18 Version,
19 Fast,
20 Lexical,
21 LexicalCS,
22 NaturalCS,
23}
24
25impl SortKey {
26 pub fn get_cmp(&self) -> fn(&Val, &Val) -> core::cmp::Ordering {
27 match self {
28 SortKey::Natural => Val::natural_cmp,
29 SortKey::X => Val::cmp_x,
30 SortKey::Date => Val::date_cmp,
31 SortKey::Version => Val::version_cmp,
32 SortKey::Fast => Val::fast_cmp,
33 SortKey::Lexical => Val::lexical_cmp,
34 SortKey::LexicalCS => Val::lexical_cs_cmp,
35 SortKey::NaturalCS => Val::natural_cs_cmp,
36 }
37 }
38
39 pub fn cmp(&self, a: &Val, b: &Val) -> core::cmp::Ordering {
40 match self {
41 SortKey::Natural => a.natural_cmp(b),
42 SortKey::X => a.cmp_x(b),
43 SortKey::Date => a.date_cmp(b),
44 SortKey::Version => a.version_cmp(b),
45 SortKey::Fast => a.fast_cmp(b),
46 SortKey::Lexical => a.lexical_cmp(b),
47 SortKey::LexicalCS => a.lexical_cs_cmp(b),
48 SortKey::NaturalCS => a.natural_cs_cmp(b),
49 }
50 }
51}
52
53#[cfg_attr(feature = "tsify", derive(tsify::Tsify))]
54#[cfg_attr(feature = "tsify", tsify(from_wasm_abi))]
55#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
56#[derive(Debug, Clone, PartialEq)]
57pub struct SortRowsArgs {
58 pub span: SpanKey,
59 pub keys: Vec<(u64, bool)>,
60 #[cfg_attr(feature = "serde", serde(default))]
61 pub sort_key: SortKey,
62 #[cfg_attr(feature = "serde", serde(default))]
63 pub select: bool,
64 #[cfg_attr(feature = "serde", serde(default = "default_emit_event_for_api"))]
65 pub emit: bool,
66 #[cfg_attr(feature = "serde", serde(default = "default_undo_for_api"))]
67 pub undo: bool,
68 #[cfg_attr(feature = "serde", serde(default = "default_save_selection_for_api"))]
69 pub save_selection: bool,
70}
71
72impl Default for SortRowsArgs {
73 fn default() -> Self {
74 SortRowsArgs {
75 span: SpanKey::default(),
76 keys: vec![],
77 sort_key: SortKey::default(),
78 select: false,
79 emit: default_emit_event_for_api(),
80 undo: default_undo_for_api(),
81 save_selection: default_save_selection_for_api(),
82 }
83 }
84}