pub struct LimitedResolutionTimestamp<Resolution, Epoch>(_, _)
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§
§impl<Resolution, Epoch> LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> LimitedResolutionTimestamp<Resolution, Epoch>where Resolution: TimeResolution, Epoch: TimeEpoch,
pub 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
.
pub 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
,
pub 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
.
pub 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
.
pub 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.
pub 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§
§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,
§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,
§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 more§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,
§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,
§fn default() -> LimitedResolutionTimestamp<Resolution, Epoch>
fn default() -> LimitedResolutionTimestamp<Resolution, Epoch>
§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,
§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>,
§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,
§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,
§fn from(
duration: LimitedResolutionDuration<Resolution>
) -> LimitedResolutionTimestamp<Resolution, Epoch>
fn from( duration: LimitedResolutionDuration<Resolution> ) -> LimitedResolutionTimestamp<Resolution, Epoch>
§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,
§fn from(
time: LimitedResolutionTimestamp<Resolution, Epoch>
) -> LimitedResolutionDuration<Resolution>
fn from( time: LimitedResolutionTimestamp<Resolution, Epoch> ) -> LimitedResolutionDuration<Resolution>
§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,
§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,
§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,
§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.§fn from_ord_bytes<'e>(
bytes: ByteSource<'k, 'e>
) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>>>::Error>
fn from_ord_bytes<'e>( bytes: ByteSource<'k, 'e> ) -> Result<LimitedResolutionTimestamp<Resolution, Epoch>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>>>::Error>
KeyEncoding::as_ord_bytes
.§fn first_value() -> Result<Self, NextValueError>
fn first_value() -> Result<Self, NextValueError>
§fn next_value(&self) -> Result<Self, NextValueError>
fn next_value(&self) -> Result<Self, NextValueError>
§impl<Resolution, Epoch> KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where Resolution: TimeResolution, Epoch: TimeEpoch,
§type Error = TimeError
type Error = TimeError
§const LENGTH: Option<usize> = None
const LENGTH: Option<usize> = None
None
.§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 more§fn as_ord_bytes(
&self
) -> Result<Cow<'_, [u8]>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>>>::Error>
fn as_ord_bytes( &self ) -> Result<Cow<'_, [u8]>, <LimitedResolutionTimestamp<Resolution, Epoch> as KeyEncoding<LimitedResolutionTimestamp<Resolution, Epoch>>>::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.§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,
§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,
§impl<Resolution, Epoch> PartialEq<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> PartialEq<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where Resolution: TimeResolution, Epoch: TimeEpoch,
§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 ==
.§impl<Resolution, Epoch> PartialOrd<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where
Resolution: TimeResolution,
Epoch: TimeEpoch,
impl<Resolution, Epoch> PartialOrd<LimitedResolutionTimestamp<Resolution, Epoch>> for LimitedResolutionTimestamp<Resolution, Epoch>where Resolution: TimeResolution, Epoch: TimeEpoch,
§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 more§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,
§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,
§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,
§fn try_from(
time: LimitedResolutionTimestamp<Resolution, Epoch>
) -> Result<SystemTime, TimeError>
fn try_from( time: LimitedResolutionTimestamp<Resolution, Epoch> ) -> Result<SystemTime, TimeError>
§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,
§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>where Epoch: Unpin, Resolution: Unpin, <Resolution as TimeResolution>::Representation: Unpin,
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
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.