Merge pull request #2125 from benthecarman/invoice-expire-time

Add helper functions for invoice expiry
This commit is contained in:
Matt Corallo 2023-03-27 22:54:05 +00:00 committed by GitHub
commit 3c02e507d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1225,6 +1225,12 @@ impl Invoice {
self.signed_invoice.recover_payee_pub_key().expect("was checked by constructor").0
}
/// Returns the Duration since the Unix epoch at which the invoice expires.
/// Returning None if overflow occurred.
pub fn expires_at(&self) -> Option<Duration> {
self.duration_since_epoch().checked_add(self.expiry_time())
}
/// Returns the invoice's expiry time, if present, otherwise [`DEFAULT_EXPIRY_TIME`].
pub fn expiry_time(&self) -> Duration {
self.signed_invoice.expiry_time()
@ -1247,6 +1253,20 @@ impl Invoice {
}
}
/// Returns the Duration remaining until the invoice expires.
#[cfg(feature = "std")]
pub fn duration_until_expiry(&self) -> Duration {
SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)
.map(|now| self.expiration_remaining_from_epoch(now))
.unwrap_or(Duration::from_nanos(0))
}
/// Returns the Duration remaining until the invoice expires given the current time.
/// `time` is the timestamp as a duration since the Unix epoch.
pub fn expiration_remaining_from_epoch(&self, time: Duration) -> Duration {
self.expires_at().map(|x| x.checked_sub(time)).flatten().unwrap_or(Duration::from_nanos(0))
}
/// Returns whether the expiry time would pass at the given point in time.
/// `at_time` is the timestamp as a duration since the Unix epoch.
pub fn would_expire(&self, at_time: Duration) -> bool {