rateslib/fx/rates/
fxrate.rs

1use crate::dual::Number;
2use crate::fx::rates::fxpair::FXPair;
3use chrono::NaiveDateTime;
4use pyo3::{pyclass, PyErr};
5use serde::{Deserialize, Serialize};
6
7/// An FX rate containing `FXPair`, `rate` and `settlement` info.
8#[pyclass(module = "rateslib.rs")]
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
10pub struct FXRate {
11    pub(crate) pair: FXPair,
12    pub(crate) rate: Number,
13    pub(crate) settlement: Option<NaiveDateTime>,
14}
15
16impl FXRate {
17    pub fn try_new(
18        lhs: &str,
19        rhs: &str,
20        rate: Number,
21        settlement: Option<NaiveDateTime>,
22    ) -> Result<Self, PyErr> {
23        Ok(FXRate {
24            pair: FXPair::try_new(lhs, rhs)?,
25            rate,
26            settlement,
27        })
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn fxrate_creation() {
37        FXRate::try_new("usd", "eur", Number::F64(1.20), None).unwrap();
38    }
39}