ferroui_dynamic_data/binding/
sort_and_bind_options.rs1use super::BindingOptions;
4use ferroui_reactive::concurrency::IScheduler;
5use std::fmt;
6use std::rc::Rc;
7
8#[derive(Clone)]
10pub struct SortAndBindOptions {
11 pub reset_threshold: usize,
13 pub use_replace_for_updates: bool,
16 pub use_binary_search: bool,
19 pub initial_capacity: Option<usize>,
22 pub reset_on_first_time_load: bool,
24 pub scheduler: Option<Rc<dyn IScheduler>>,
26}
27
28impl Default for SortAndBindOptions {
29 fn default() -> Self {
31 Self {
32 reset_threshold: BindingOptions::DEFAULT_RESET_THRESHOLD,
33 use_replace_for_updates: BindingOptions::DEFAULT_USE_REPLACE_FOR_UPDATES,
34 use_binary_search: false,
35 initial_capacity: None,
36 reset_on_first_time_load: false,
37 scheduler: None,
38 }
39 }
40}
41
42impl PartialEq for SortAndBindOptions {
43 fn eq(&self, other: &Self) -> bool {
45 self.reset_threshold == other.reset_threshold
46 && self.use_replace_for_updates == other.use_replace_for_updates
47 && self.use_binary_search == other.use_binary_search
48 && self.initial_capacity == other.initial_capacity
49 && self.reset_on_first_time_load == other.reset_on_first_time_load
50 && match (&self.scheduler, &other.scheduler) {
51 (None, None) => true,
52 (Some(a), Some(b)) => std::ptr::addr_eq(Rc::as_ptr(a), Rc::as_ptr(b)),
53 _ => false,
54 }
55 }
56}
57
58impl fmt::Debug for SortAndBindOptions {
59 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60 f.debug_struct("SortAndBindOptions")
61 .field("reset_threshold", &self.reset_threshold)
62 .field("use_replace_for_updates", &self.use_replace_for_updates)
63 .field("use_binary_search", &self.use_binary_search)
64 .field("initial_capacity", &self.initial_capacity)
65 .field("reset_on_first_time_load", &self.reset_on_first_time_load)
66 .field("scheduler", &self.scheduler.is_some())
67 .finish()
68 }
69}