Skip to main content

tree_table/args/
args_sort.rs

1use 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}