fugle 0.3.8

A Simple, Lightweight, Fast and Safe Fugle Library
Documentation
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use time::Date;

use crate::schema::de_date;

#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase", default)]
pub struct Candle {
    #[serde(deserialize_with = "de_date")]
    pub date: Date,
    pub open: Decimal,
    pub high: Decimal,
    pub low: Decimal,
    pub close: Decimal,
    pub volume: u64,
    pub turnover: u64,
    pub change: Decimal,
}

impl Default for Candle {
    fn default() -> Candle {
        Candle {
            date: Date::MIN,
            open: Decimal::new(0, 2),
            high: Decimal::new(0, 2),
            low: Decimal::new(0, 2),
            close: Decimal::new(0, 2),
            volume: 0,
            turnover: 0,
            change: Decimal::new(0, 2),
        }
    }
}

#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase", default)]
pub struct CandlesResponse {
    pub symbol_id: String,
    #[serde(rename = "type")]
    pub typ: String,
    pub exchange: String,
    pub market: String,
    pub candles: Vec<Candle>,
}

impl Default for CandlesResponse {
    fn default() -> CandlesResponse {
        CandlesResponse {
            symbol_id: "".to_string(),
            typ: "".to_string(),
            exchange: "".to_string(),
            market: "".to_string(),
            candles: Vec::with_capacity(0),
        }
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_candle_default() {
        let c = Candle::default();
        assert_eq!(c.date, Date::MIN);
        assert_eq!(c.open, Decimal::new(0, 2));
        assert_eq!(c.high, Decimal::new(0, 2));
        assert_eq!(c.low, Decimal::new(0, 2));
        assert_eq!(c.close, Decimal::new(0, 2));
        assert_eq!(c.volume, 0);
        assert_eq!(c.turnover, 0);
        assert_eq!(c.change, Decimal::new(0, 2));
    }
}