rateslib/scheduling/py/
imm.rs1use crate::json::{DeserializedObj, JSON};
2use crate::scheduling::frequency::Imm;
3
4use chrono::prelude::*;
5use pyo3::exceptions::PyValueError;
6use pyo3::prelude::*;
7
8#[pymethods]
9impl Imm {
10 #[pyo3(name = "next")]
21 fn next_py(&self, date: NaiveDateTime) -> NaiveDateTime {
22 self.next(&date)
23 }
24
25 #[pyo3(name = "validate")]
36 fn validate_py(&self, date: NaiveDateTime) -> bool {
37 self.validate(&date)
38 }
39
40 #[pyo3(name = "get")]
53 fn from_ym_opt_py(&self, year: i32, month: u32) -> PyResult<NaiveDateTime> {
54 self.from_ym_opt(year, month)
55 }
56
57 #[pyo3(name = "to_json")]
64 fn to_json_py(&self) -> PyResult<String> {
65 match DeserializedObj::Imm(self.clone()).to_json() {
66 Ok(v) => Ok(v),
67 Err(_) => Err(PyValueError::new_err("Failed to serialize `Imm` to JSON.")),
68 }
69 }
70
71 #[new]
73 fn new_py(item: usize) -> Imm {
74 match item {
75 _ if item == Imm::Wed3 as usize => Imm::Wed3,
76 _ if item == Imm::Wed3_HMUZ as usize => Imm::Wed3_HMUZ,
77 _ if item == Imm::Fri2 as usize => Imm::Fri2,
78 _ if item == Imm::Fri2_HMUZ as usize => Imm::Fri2_HMUZ,
79 _ if item == Imm::Day20 as usize => Imm::Day20,
80 _ if item == Imm::Day20_HU as usize => Imm::Day20_HU,
81 _ if item == Imm::Day20_MZ as usize => Imm::Day20_MZ,
82 _ if item == Imm::Day20_HMUZ as usize => Imm::Day20_HMUZ,
83 _ if item == Imm::Wed1_Post9 as usize => Imm::Wed1_Post9,
84 _ if item == Imm::Wed1_Post9_HMUZ as usize => Imm::Wed1_Post9_HMUZ,
85 _ if item == Imm::Eom as usize => Imm::Eom,
86 _ if item == Imm::Leap as usize => Imm::Leap,
87 _ => panic!("Reportable issue: must map this enum variant for serialization."),
88 }
89 }
90 fn __getnewargs__<'py>(&self) -> PyResult<(usize,)> {
91 Ok((*self as usize,))
92 }
93
94 fn __repr__(&self) -> String {
95 format!("<rl.Imm.{:?} at {:p}>", self, self)
96 }
97}