use chrono::{DateTime, Duration, Months, Utc};
use uuid::Uuid;
pub fn access() -> String {
"public".to_string()
}
pub fn add_days(dtm: i64, days: i64) -> i64 {
let dt = DateTime::from_timestamp(dtm, 0).unwrap() + Duration::try_days(days).unwrap();
dt.timestamp()
}
pub fn add_months(dtm: i64, months: u32) -> i64 {
let dt = DateTime::from_timestamp(dtm, 0).unwrap() + Months::new(months);
dt.timestamp()
}
pub fn add_years(dtm: i64, years: u32) -> i64 {
let dt = DateTime::from_timestamp(dtm, 0).unwrap() + Months::new(years * 12);
dt.timestamp()
}
pub fn id() -> String {
Uuid::new_v4().to_string()
}
pub fn never() -> i64 {
253402261199
}
pub fn now() -> i64 {
Utc::now().timestamp()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_id() {
assert_eq!(id().len(), "54324f57-9e6b-4142-b68d-1d4c86572d0a".len());
}
#[test]
fn test_add_days() {
assert_eq!(add_days(1711295319, 1), 1711381719);
}
#[test]
fn test_add_months() {
assert_eq!(add_months(1711295319, 1), 1713973719);
assert_eq!(add_months(1674993600, 1), 1677585600);
}
#[test]
fn test_add_years() {
assert_eq!(add_years(1711295319, 1), 1742831319);
assert_eq!(add_years(1709208000, 1), 1740744000);
}
#[test]
fn test_never() {
assert_eq!(never(), 253402261199);
}
#[test]
fn test_now() {
assert_eq!(now(), Utc::now().timestamp());
}
}