trading-charts 0.1.2

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

#[derive(Serialize, Deserialize, Clone)]
pub struct HandleScrollOptions {
    #[serde(rename = "mouseWheel", default = "defaults::mouse_wheel")]
    mouse_wheel: bool,

    #[serde(rename = "pressedMouseMove", default = "defaults::pressed_mouse_move")]
    pressed_mouse_move: bool,

    #[serde(rename = "horzTouchDrag", default = "defaults::horz_touch_drag")]
    horz_touch_drag: bool,

    #[serde(rename = "vertTouchDrag", default = "defaults::vert_touch_drag")]
    vert_touch_drag: bool,
}

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

    pub fn with_mouse_wheel(self, mouse_wheel: bool) -> Self {
        Self {
            mouse_wheel,
            ..self
        }
    }

    pub fn with_pressed_mouse_move(self, pressed_mouse_move: bool) -> Self {
        Self {
            pressed_mouse_move,
            ..self
        }
    }

    pub fn with_horz_touch_drag(self, horz_touch_drag: bool) -> Self {
        Self {
            horz_touch_drag,
            ..self
        }
    }

    pub fn with_vert_touch_drag(self, vert_touch_drag: bool) -> Self {
        Self {
            vert_touch_drag,
            ..self
        }
    }

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

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

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

    pub fn set_pressed_mouse_move(&mut self, pressed_mouse_move: bool) {
        self.pressed_mouse_move = pressed_mouse_move;
    }

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

    pub fn set_horz_touch_drag(&mut self, horz_touch_drag: bool) {
        self.horz_touch_drag = horz_touch_drag;
    }

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

    pub fn set_vert_touch_drag(&mut self, vert_touch_drag: bool) {
        self.vert_touch_drag = vert_touch_drag;
    }
}

impl Default for HandleScrollOptions {
    fn default() -> Self {
        Self {
            mouse_wheel:        defaults::mouse_wheel(),
            pressed_mouse_move: defaults::pressed_mouse_move(),
            horz_touch_drag:    defaults::horz_touch_drag(),
            vert_touch_drag:    defaults::vert_touch_drag(),
        }
    }
}

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

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

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

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