rust_finprim/amort_dep_tax/
mod.rs

1//! This module provides functions related to loan/mortgage amortization, depreciation, and tax calculations.
2
3// Structs
4mod structs;
5pub use structs::{AmortizationPeriod, DepreciationPeriod};
6
7// Amortization
8mod amort;
9#[cfg(feature = "std")]
10pub use amort::amort_schedule;
11pub use amort::amort_schedule_into;
12
13// Depreciation
14mod dep;
15#[cfg(feature = "std")]
16pub use dep::{db, macrs, sln, syd};
17pub use dep::{db_into, macrs_into, sln_into, syd_into};
18
19// Tax
20mod tax;
21pub use tax::{progressive_tax, progressive_tax_unchecked};
22
23#[cfg(feature = "serde")]
24#[cfg(test)]
25mod tests {
26    #[cfg(not(feature = "std"))]
27    extern crate std;
28    use super::*;
29    use rust_decimal_macros::*;
30    #[cfg(not(feature = "std"))]
31    use std::prelude::v1::*;
32    #[cfg(not(feature = "std"))]
33    use std::{assert, assert_eq, println, vec};
34
35    #[test]
36    fn test_serde() {
37        let period = AmortizationPeriod::new(1, dec!(100), dec!(50), dec!(850));
38        let serialized = serde_json::to_string(&period).unwrap();
39        let deserialized: AmortizationPeriod = serde_json::from_str(&serialized).unwrap();
40        assert_eq!(period, deserialized);
41        let clone = period.clone();
42        assert_eq!(period, clone);
43
44        let dep_period = DepreciationPeriod::new(1, dec!(100), dec!(900));
45        let serialized = serde_json::to_string(&dep_period).unwrap();
46        let deserialized: DepreciationPeriod = serde_json::from_str(&serialized).unwrap();
47        assert_eq!(dep_period, deserialized);
48        let clone = dep_period.clone();
49        assert_eq!(dep_period, clone);
50    }
51}