Struct bonsaidb_core::key::time::limited::LimitedResolutionTimestamp
source · pub struct LimitedResolutionTimestamp<Resolution: TimeResolution, Epoch: TimeEpoch>(/* private fields */);
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() -> Self
pub fn now() -> Self
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::Representation
pub const fn representation(&self) -> Resolution::Representation
Returns the internal representation of this timestamp, which is a
unit of Resolution
.
sourcepub fn from_representation(representation: Resolution::Representation) -> Self
pub fn from_representation(representation: Resolution::Representation) -> Self
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: TimeResolution, Epoch: TimeEpoch> Clone for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution: TimeResolution, Epoch: TimeEpoch> Clone for LimitedResolutionTimestamp<Resolution, Epoch>
source§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§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<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::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>) -> Self
fn from(duration: LimitedResolutionDuration<Resolution>) -> Self
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>) -> Self
fn from(time: LimitedResolutionTimestamp<Resolution, Epoch>) -> Self
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: TimeResolution, Epoch: TimeEpoch> Hash for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution: TimeResolution, Epoch: TimeEpoch> Hash for LimitedResolutionTimestamp<Resolution, Epoch>
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<Self, Self::Error>
fn from_ord_bytes<'e>(bytes: ByteSource<'k, 'e>) -> Result<Self, Self::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§impl<Resolution: TimeResolution, Epoch: TimeEpoch> Ord for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution: TimeResolution, Epoch: TimeEpoch> Ord for LimitedResolutionTimestamp<Resolution, Epoch>
source§impl<Resolution: TimeResolution, Epoch: TimeEpoch> PartialEq for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution: TimeResolution, Epoch: TimeEpoch> PartialEq for LimitedResolutionTimestamp<Resolution, Epoch>
source§impl<Resolution: TimeResolution, Epoch: TimeEpoch> PartialOrd for LimitedResolutionTimestamp<Resolution, Epoch>
impl<Resolution: TimeResolution, Epoch: TimeEpoch> PartialOrd for LimitedResolutionTimestamp<Resolution, Epoch>
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