trading-charts 0.1.2

Rust binding of Lightweight Charts for Leptos
use super::{super::FlagableOptions, AxisDoubleClickOptions, AxisPressedMouseMoveOptions};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone)]
pub struct HandleScaleOptions {
    mouse_wheel: bool,

    pinch: bool,

    #[serde(
        rename = "axisPressedMouseMove",
        skip_serializing_if = "FlagableOptions::is_none",
        default
    )]
    axis_pressed_mouse_move: FlagableOptions<AxisPressedMouseMoveOptions>,

    #[serde(
        rename = "axisDoubleClickReset",
        skip_serializing_if = "FlagableOptions::is_none",
        default
    )]
    axis_double_click_reset: FlagableOptions<AxisDoubleClickOptions>,
}

impl HandleScaleOptions {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn new_with_options(
        mouse_wheel: bool,
        pinch: bool,
        axis_pressed_mouse_move: FlagableOptions<AxisPressedMouseMoveOptions>,
        axis_double_click_reset: FlagableOptions<AxisDoubleClickOptions>,
    ) -> Self {
        Self {
            mouse_wheel,
            pinch,
            axis_pressed_mouse_move,
            axis_double_click_reset,
        }
    }

    pub fn mouse_wheel(&self) -> bool {
        self.mouse_wheel
    }

    pub fn set_mouse_wheel(&mut self, value: bool) {
        self.mouse_wheel = value;
    }

    pub fn pinch(&self) -> bool {
        self.pinch
    }

    pub fn set_pinch(&mut self, value: bool) {
        self.pinch = value;
    }

    pub fn axis_pressed_mouse_move(&self) -> &FlagableOptions<AxisPressedMouseMoveOptions> {
        &self.axis_pressed_mouse_move
    }

    pub fn axis_pressed_mouse_move_mut(&mut self) -> &mut FlagableOptions<AxisPressedMouseMoveOptions> {
        &mut self.axis_pressed_mouse_move
    }

    pub fn set_axis_pressed_mouse_move(&mut self, value: FlagableOptions<AxisPressedMouseMoveOptions>) {
        self.axis_pressed_mouse_move = value;
    }

    pub fn axis_double_click_reset(&self) -> &FlagableOptions<AxisDoubleClickOptions> {
        &self.axis_double_click_reset
    }

    pub fn axis_double_click_reset_mut(&mut self) -> &mut FlagableOptions<AxisDoubleClickOptions> {
        &mut self.axis_double_click_reset
    }

    pub fn set_axis_double_click_reset(&mut self, value: FlagableOptions<AxisDoubleClickOptions>) {
        self.axis_double_click_reset = value;
    }
}

impl Default for HandleScaleOptions {
    fn default() -> Self {
        Self {
            mouse_wheel:             defaults::mouse_wheel(),
            pinch:                   defaults::pinch(),
            axis_pressed_mouse_move: FlagableOptions::default(),
            axis_double_click_reset: FlagableOptions::default(),
        }
    }
}

mod defaults {
    pub(super) fn mouse_wheel() -> bool {
        true
    }

    pub(super) fn pinch() -> bool {
        true
    }
}