1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use chrono::{serde::ts_seconds, DateTime, Utc};
use rust_decimal::prelude::Decimal;
use rusty_money::{iso::Currency, ExchangeRate};
use serde::Deserialize;
use std::collections::HashMap;

#[derive(Debug, Clone, Deserialize)]
pub struct SuccessGuard {
    pub success: bool,
}

#[derive(Debug, Clone, Deserialize)]
pub struct CurrencyRatesResponse {
    /// Time of the request
    #[serde(with = "ts_seconds")]
    pub timestamp: DateTime<Utc>,

    /// Currency rates keyed by currency code
    pub quotes: HashMap<String, Decimal>,
}

#[derive(Debug, Clone)]
pub struct CurrencyRates<'a> {
    /// Time of the request
    pub timestamp: DateTime<Utc>,

    /// Currency rates keyed by target currency code
    pub quotes: HashMap<String, ExchangeRate<'a, Currency>>,
}

#[derive(Debug, Clone, Deserialize)]
pub struct ErrorBody {
    pub code: u16,
    pub info: String,
}

#[derive(Debug, Clone, Deserialize)]
pub struct ErrorResponse {
    pub error: ErrorBody,
}