pub struct LimitedResolutionTimestamp<Resolution, Epoch>(/* private fields */)
where
Resolution: TimeResolution,
Epoch: TimeEpoch;
Expand description
A timestamp (moment in time) stored with a limited Resolution
. This
type may be preferred to std::time::SystemTime
because SystemTime
serializes with nanosecond resolution. Often this level of precision is
not needed and less storage and memory can be used.
This type stores the representation of the timestamp as a
LimitedResolutionDuration
relative to Epoch
.
The Resolution
type controls the storage size. The resolutions
provided by BonsaiDb:
Other resolutions can be used by implementing TimeResolution
.
BonsaiDb provides two TimeEpoch
implementations:
Implementations§
source§impl<Resolution, Epoch> LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
sourcepub fn now() -> LimitedResolutionTimestamp<Resolution, Epoch>
pub fn now() -> LimitedResolutionTimestamp<Resolution, Epoch>
Returns SystemTime::now()
limited to Resolution
. The timestamp
will be truncated, not rounded.
Panics
This function will panic SystemTime::now()
is unable to be
represented by Resolution
and Epoch
.
sourcepub fn duration_since(
&self,
other: &impl AnyTimestamp
) -> Result<Option<Duration>, TimeError>
pub fn duration_since( &self, other: &impl AnyTimestamp ) -> Result<Option<Duration>, TimeError>
Returns the duration since another timestamp. This returns None if
other
is before self
,
sourcepub fn duration_between(
&self,
other: &impl AnyTimestamp
) -> Result<Duration, TimeError>
pub fn duration_between( &self, other: &impl AnyTimestamp ) -> Result<Duration, TimeError>
Returns the absolute duration between self
and other
.
sourcepub const fn representation(
&self
) -> <Resolution as TimeResolution>::Representation
pub const fn representation( &self ) -> <Resolution as TimeResolution>::Representation
Returns the internal representation of this timestamp, which is a
unit of Resolution
.
sourcepub fn from_representation(
representation: <Resolution as TimeResolution>::Representation
) -> LimitedResolutionTimestamp<Resolution, Epoch>
pub fn from_representation( representation: <Resolution as TimeResolution>::Representation ) -> LimitedResolutionTimestamp<Resolution, Epoch>
Returns a new timestamp using the representation
provided.
sourcepub fn to_timestamp_string(&self) -> Result<String, TimeError>
pub fn to_timestamp_string(&self) -> Result<String, TimeError>
Converts this value to a a decimal string containing the number of seconds since the unix epoch (January 1, 1970 00:00:00 UTC).
The resulting string can be parsed as well.
use bonsaidb_core::key::time::limited::{
BonsaiEpoch, LimitedResolutionTimestamp, Milliseconds,
};
let now = LimitedResolutionTimestamp::<Milliseconds, BonsaiEpoch>::now();
let timestamp = now.to_timestamp_string().unwrap();
let parsed = timestamp.parse().unwrap();
assert_eq!(now, parsed);
The difference between this function and to_string()
] is that
to_string()
will revert to using the underlying
LimitedResolutionDuration
’s to_string()
if a value is unable
to be converted to a value relative to the unix epoch.
Trait Implementations§
source§impl<Resolution, Epoch> AnyTimestamp for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> AnyTimestamp for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§impl<Resolution, Epoch> Clone for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Clone for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn clone(&self) -> LimitedResolutionTimestamp<Resolution, Epoch>
fn clone(&self) -> LimitedResolutionTimestamp<Resolution, Epoch>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<Resolution, Epoch> Debug for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Debug for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§impl<Resolution, Epoch> Default for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Default for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn default() -> LimitedResolutionTimestamp<Resolution, Epoch>
fn default() -> LimitedResolutionTimestamp<Resolution, Epoch>
source§impl<'de, Resolution, Epoch> Deserialize<'de> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<'de, Resolution, Epoch> Deserialize<'de> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn deserialize<D>(
deserializer: D
) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D
) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
source§impl<Resolution, Epoch> Display for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Display for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§impl<Resolution, Epoch> From<LimitedResolutionDuration<Resolution>> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> From<LimitedResolutionDuration<Resolution>> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn from(
duration: LimitedResolutionDuration<Resolution>
) -> LimitedResolutionTimestamp<Resolution, Epoch>
fn from( duration: LimitedResolutionDuration<Resolution> ) -> LimitedResolutionTimestamp<Resolution, Epoch>
source§impl<Resolution, Epoch> From<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionDuration<Resolution>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> From<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionDuration<Resolution>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn from(
time: LimitedResolutionTimestamp<Resolution, Epoch>
) -> LimitedResolutionDuration<Resolution>
fn from( time: LimitedResolutionTimestamp<Resolution, Epoch> ) -> LimitedResolutionDuration<Resolution>
source§impl<Resolution, Epoch> FromStr for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> FromStr for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§impl<Resolution, Epoch> Hash for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Hash for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§impl<'k, Resolution, Epoch> Key<'k> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<'k, Resolution, Epoch> Key<'k> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§const CAN_OWN_BYTES: bool = false
const CAN_OWN_BYTES: bool = false
Vec<u8>
. This flag is
used as a hint of whether to attempt to do memcpy operations in some
decoding operations to avoid extra allocations.source§fn from_ord_bytes<'e>(
bytes: ByteSource<'k, 'e>
) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding>::Error>
fn from_ord_bytes<'e>( bytes: ByteSource<'k, 'e> ) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding>::Error>
KeyEncoding::as_ord_bytes
.source§fn first_value() -> Result<Self, NextValueError>
fn first_value() -> Result<Self, NextValueError>
source§fn next_value(&self) -> Result<Self, NextValueError>
fn next_value(&self) -> Result<Self, NextValueError>
source§impl<Resolution, Epoch> KeyEncoding for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> KeyEncoding for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
§type Error = TimeError
type Error = TimeError
source§const LENGTH: Option<usize> = None
const LENGTH: Option<usize> = None
None
.source§fn describe<Visitor>(visitor: &mut Visitor)where
Visitor: KeyVisitor,
fn describe<Visitor>(visitor: &mut Visitor)where
Visitor: KeyVisitor,
visitor
describing the
key being encoded. Read moresource§fn as_ord_bytes(
&self
) -> Result<Cow<'_, [u8]>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding>::Error>
fn as_ord_bytes( &self ) -> Result<Cow<'_, [u8]>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding>::Error>
self
into a Cow<'_, [u8]>
containing bytes that are able to be
compared via memcmp
in a way that is comptaible with its own Ord
implementation.source§impl<Resolution, Epoch> Ord for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Ord for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn cmp(
&self,
__other: &LimitedResolutionTimestamp<Resolution, Epoch>
) -> Ordering
fn cmp( &self, __other: &LimitedResolutionTimestamp<Resolution, Epoch> ) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl<Resolution, Epoch> PartialEq for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> PartialEq for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn eq(&self, __other: &LimitedResolutionTimestamp<Resolution, Epoch>) -> bool
fn eq(&self, __other: &LimitedResolutionTimestamp<Resolution, Epoch>) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl<Resolution, Epoch> PartialOrd for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> PartialOrd for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn partial_cmp(
&self,
__other: &LimitedResolutionTimestamp<Resolution, Epoch>
) -> Option<Ordering>
fn partial_cmp( &self, __other: &LimitedResolutionTimestamp<Resolution, Epoch> ) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl<Resolution, Epoch> Serialize for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Serialize for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
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,
source§impl<Resolution, Epoch> TryFrom<LimitedResolutionTimestamp<Resolution, Epoch>> for SystemTimewhere
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> TryFrom<LimitedResolutionTimestamp<Resolution, Epoch>> for SystemTimewhere
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn try_from(
time: LimitedResolutionTimestamp<Resolution, Epoch>
) -> Result<SystemTime, TimeError>
fn try_from( time: LimitedResolutionTimestamp<Resolution, Epoch> ) -> Result<SystemTime, TimeError>
source§impl<Resolution, Epoch> TryFrom<SystemTime> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> TryFrom<SystemTime> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
source§fn try_from(
time: SystemTime
) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, TimeError>
fn try_from( time: SystemTime ) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, TimeError>
impl<Resolution, Epoch> Copy for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> Eq for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
Auto Trait Implementations§
impl<Resolution, Epoch> RefUnwindSafe for LimitedResolutionTimestamp<Resolution, Epoch>where
Epoch: RefUnwindSafe,
Resolution: RefUnwindSafe,
<Resolution as TimeResolution>::Representation: RefUnwindSafe,
impl<Resolution, Epoch> Send for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution, Epoch> Sync for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution, Epoch> Unpin for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution, Epoch> UnwindSafe for LimitedResolutionTimestamp<Resolution, Epoch>where
Epoch: UnwindSafe,
Resolution: UnwindSafe,
<Resolution as TimeResolution>::Representation: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> CallHasher for T
impl<T> CallHasher for T
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.