pub enum ExpirationDate {
Days(Positive),
DateTime(DateTime<Utc>),
}Expand description
Represents the expiration of a financial instrument.
Variants§
Days(Positive)
Relative expiration in positive fractional days.
DateTime(DateTime<Utc>)
Absolute expiration point in UTC.
Implementations§
Source§impl ExpirationDate
impl ExpirationDate
Sourcepub fn get_years_with_convention<C>(
&self,
convention: C,
) -> Result<Positive, ExpirationDateError>where
C: DayCount,
pub fn get_years_with_convention<C>(
&self,
convention: C,
) -> Result<Positive, ExpirationDateError>where
C: DayCount,
Calculates years using a specific day count convention.
§Errors
Returns ExpirationDateError if calculation fails.
Sourcepub fn get_years(&self) -> Result<Positive, ExpirationDateError>
pub fn get_years(&self) -> Result<Positive, ExpirationDateError>
Calculates years until expiration using standard Actual/365 Fixed.
§Errors
Returns ExpirationDateError if calculation fails.
§Examples
use chrono::{Duration, Utc};
use positive::{assert_pos_relative_eq, pos_or_panic, Positive};
use expiration_date::ExpirationDate;
let days = pos_or_panic!(365.0);
let expiration_date_days = ExpirationDate::Days(days);
let years = expiration_date_days.get_years().unwrap();
assert_pos_relative_eq!(years, Positive::ONE, pos_or_panic!(0.001));
let datetime = Utc::now() + Duration::days(365);
let expiration_date_datetime = ExpirationDate::DateTime(datetime);
let years = expiration_date_datetime.get_years().unwrap();
assert_pos_relative_eq!(years, Positive::ONE, pos_or_panic!(0.01));Sourcepub fn get_days(&self) -> Result<Positive, ExpirationDateError>
pub fn get_days(&self) -> Result<Positive, ExpirationDateError>
Returns the number of fractional days until expiration.
§Errors
Returns ExpirationDateError if conversion to Positive fails.
Sourcepub fn get_date(&self) -> Result<DateTime<Utc>, ExpirationDateError>
pub fn get_date(&self) -> Result<DateTime<Utc>, ExpirationDateError>
Resolves expiration to an absolute DateTime<Utc>.
§Errors
Returns ExpirationDateError if construction fails.
§Examples
use chrono::{Duration, Utc};
use positive::pos_or_panic;
use expiration_date::ExpirationDate;
// Clear any stored reference datetime from previous tests so the
// relative calculation uses `Utc::now()` as its base.
ExpirationDate::set_reference_datetime(None);
let days = pos_or_panic!(30.0);
let expiration_date_days = ExpirationDate::Days(days);
let future_date = Utc::now() + Duration::days(30);
let calculated_date = expiration_date_days.get_date().unwrap();
assert_eq!(calculated_date.date_naive(), future_date.date_naive());
let datetime = Utc::now() + Duration::days(365);
let expiration_date_datetime = ExpirationDate::DateTime(datetime);
let stored_date = expiration_date_datetime.get_date().unwrap();
assert_eq!(stored_date, datetime);Sourcepub fn get_date_with_options(
&self,
use_fixed_time: bool,
) -> Result<DateTime<Utc>, ExpirationDateError>
pub fn get_date_with_options( &self, use_fixed_time: bool, ) -> Result<DateTime<Utc>, ExpirationDateError>
Resolves datetime with advanced base-time options.
§Errors
Returns ExpirationDateError if the construction fails.
Sourcepub fn get_date_string(&self) -> Result<String, ExpirationDateError>
pub fn get_date_string(&self) -> Result<String, ExpirationDateError>
Returns the expiration date as a formatted YYYY-MM-DD string.
§Errors
Returns error if the date cannot be resolved.
§Examples
use positive::pos_or_panic;
use expiration_date::ExpirationDate;
let days = pos_or_panic!(30.0);
let expiration_date = ExpirationDate::Days(days);
let date_string = expiration_date.get_date_string().unwrap();
assert!(date_string.len() == 10); // YYYY-MM-DD formatSource§impl ExpirationDate
impl ExpirationDate
Sourcepub fn from_string(s: &str) -> Result<ExpirationDate, ExpirationDateError>
pub fn from_string(s: &str) -> Result<ExpirationDate, ExpirationDateError>
Parse expiration from string using multiple formats.
Supports the following input shapes:
- Positive number of days: e.g.,
"30.0" - ISO date: e.g.,
"2025-01-01" - Date with time and timezone: e.g.,
"2025-01-01 12:00:00 UTC" - RFC3339-like with time: e.g.,
"2025-05-23T15:29"or"2025-05-23T15:29:00Z" - Numeric date (YYYYMMDD): e.g.,
"20250101" - Common date formats: e.g.,
"01-01-2025","30 jan 2025","30-jan-2025","30 january 2025","30-january-2025"
Month names are matched case-insensitively.
§Errors
Returns ExpirationDateError::ParseError if format matches no known pattern, or ExpirationDateError::InvalidDateTime if the derived time components are out of range.
§Examples
use expiration_date::ExpirationDate;
use positive::pos_or_panic;
let exp_days = ExpirationDate::from_string("365").unwrap();
assert_eq!(exp_days, ExpirationDate::Days(pos_or_panic!(365.0)));
let exp_date = ExpirationDate::from_string("2025-12-31").unwrap();Sourcepub fn from_string_to_days(
s: &str,
) -> Result<ExpirationDate, ExpirationDateError>
pub fn from_string_to_days( s: &str, ) -> Result<ExpirationDate, ExpirationDateError>
Parses string and converts result to Days variant.
§Errors
Returns error if parsing or conversion fails.
Source§impl ExpirationDate
impl ExpirationDate
Sourcepub fn set_reference_datetime(dt: Option<DateTime<Utc>>)
pub fn set_reference_datetime(dt: Option<DateTime<Utc>>)
Sets the reference datetime for Days variant calculations.
Sourcepub fn get_reference_datetime() -> Option<DateTime<Utc>>
pub fn get_reference_datetime() -> Option<DateTime<Utc>>
Gets the current reference datetime.
Trait Implementations§
Source§impl Clone for ExpirationDate
impl Clone for ExpirationDate
Source§fn clone(&self) -> ExpirationDate
fn clone(&self) -> ExpirationDate
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ExpirationDate
Source§impl Debug for ExpirationDate
impl Debug for ExpirationDate
Source§impl Default for ExpirationDate
impl Default for ExpirationDate
Source§fn default() -> ExpirationDate
fn default() -> ExpirationDate
Source§impl<'de> Deserialize<'de> for ExpirationDate
impl<'de> Deserialize<'de> for ExpirationDate
Source§fn deserialize<D>(
deserializer: D,
) -> Result<ExpirationDate, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<ExpirationDate, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Source§impl Display for ExpirationDate
impl Display for ExpirationDate
impl Eq for ExpirationDate
Source§impl Hash for ExpirationDate
impl Hash for ExpirationDate
Source§impl Ord for ExpirationDate
impl Ord for ExpirationDate
Source§fn cmp(&self, other: &ExpirationDate) -> Ordering
fn cmp(&self, other: &ExpirationDate) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for ExpirationDate
impl PartialEq for ExpirationDate
Source§impl PartialOrd for ExpirationDate
impl PartialOrd for ExpirationDate
Source§impl Serialize for ExpirationDate
impl Serialize for ExpirationDate
Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Auto Trait Implementations§
impl Freeze for ExpirationDate
impl RefUnwindSafe for ExpirationDate
impl Send for ExpirationDate
impl Sync for ExpirationDate
impl Unpin for ExpirationDate
impl UnsafeUnpin for ExpirationDate
impl UnwindSafe for ExpirationDate
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.