Struct bilrost_types::Duration
source · pub struct Duration {
pub seconds: i64,
pub nanos: i32,
}Expand description
A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like “day” or “month”. It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years.
Values of this type are not guaranteed to only exist in their normalized form.
§Examples
Example 1: Compute Duration from two Timestamps in pseudo code.
Timestamp start = ...;
Timestamp end = ...;
Duration duration = ...;
duration.seconds = end.seconds - start.seconds;
duration.nanos = end.nanos - start.nanos;
if (duration.seconds < 0 && duration.nanos > 0) {
duration.seconds += 1;
duration.nanos -= 1000000000;
} else if (duration.seconds > 0 && duration.nanos < 0) {
duration.seconds -= 1;
duration.nanos += 1000000000;
}
Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
Timestamp start = ...;
Duration duration = ...;
Timestamp end = ...;
end.seconds = start.seconds + duration.seconds;
end.nanos = start.nanos + duration.nanos;
if (end.nanos < 0) {
end.seconds -= 1;
end.nanos += 1000000000;
} else if (end.nanos >= 1000000000) {
end.seconds += 1;
end.nanos -= 1000000000;
}
Example 3: Compute Duration from datetime.timedelta in Python.
td = datetime.timedelta(days=3, minutes=10)
duration = Duration()
duration.FromTimedelta(td)
§JSON Mapping
In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix “s” (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as “3s”, while 3 seconds and 1 nanosecond should be expressed in JSON format as “3.000000001s”, and 3 seconds and 1 microsecond should be expressed in JSON format as “3.000001s”.
Fields§
§seconds: i64Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
nanos: i32Signed fractions of a second at nanosecond resolution of the span
of time. Durations less than one second are represented with a 0
seconds field and a positive or negative nanos field. For durations
of one second or more, a non-zero value for the nanos field must be
of the same sign as the seconds field. Must be from -999,999,999
to +999,999,999 inclusive.
Implementations§
source§impl Duration
impl Duration
sourcepub fn is_canonical(&self) -> bool
pub fn is_canonical(&self) -> bool
Returns true iff the duration is already normalized.
sourcepub fn normalize(&mut self)
pub fn normalize(&mut self)
Normalizes the duration to a canonical format.
Based on google::protobuf::util::CreateNormalized.
Trait Implementations§
source§impl PartialEq for Duration
impl PartialEq for Duration
source§impl PartialOrd for Duration
impl PartialOrd for Duration
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 RawDistinguishedMessage for Duration
impl RawDistinguishedMessage for Duration
fn raw_decode_field_distinguished<__B>( &mut self, tag: u32, wire_type: WireType, duplicated: bool, buf: Capped<'_, __B>, ctx: DecodeContext ) -> Result<Canonicity, DecodeError>
source§impl RawMessage for Duration
impl RawMessage for Duration
const __ASSERTIONS: () = _
source§fn raw_encode<__B>(&self, buf: &mut __B)
fn raw_encode<__B>(&self, buf: &mut __B)
source§fn raw_prepend<__B>(&self, buf: &mut __B)where
__B: ReverseBuf + ?Sized,
fn raw_prepend<__B>(&self, buf: &mut __B)where
__B: ReverseBuf + ?Sized,
source§fn raw_decode_field<__B>(
&mut self,
tag: u32,
wire_type: WireType,
duplicated: bool,
buf: Capped<'_, __B>,
ctx: DecodeContext
) -> Result<(), DecodeError>
fn raw_decode_field<__B>( &mut self, tag: u32, wire_type: WireType, duplicated: bool, buf: Capped<'_, __B>, ctx: DecodeContext ) -> Result<(), DecodeError>
self.source§fn raw_encoded_len(&self) -> usize
fn raw_encoded_len(&self) -> usize
source§impl TryFrom<Duration> for Duration
impl TryFrom<Duration> for Duration
source§fn try_from(duration: Duration) -> Result<Duration, DurationError>
fn try_from(duration: Duration) -> Result<Duration, DurationError>
Converts a std::time::Duration to a Duration, failing if the duration is too large.
§type Error = DurationError
type Error = DurationError
source§impl TryFrom<Duration> for Duration
impl TryFrom<Duration> for Duration
source§fn try_from(duration: Duration) -> Result<Duration, DurationError>
fn try_from(duration: Duration) -> Result<Duration, DurationError>
Converts a Duration to a std::time::Duration, failing if the duration is negative.
§type Error = DurationError
type Error = DurationError
impl Eq for Duration
impl StructuralPartialEq for Duration
Auto Trait Implementations§
impl Freeze for Duration
impl RefUnwindSafe for Duration
impl Send for Duration
impl Sync for Duration
impl Unpin for Duration
impl UnwindSafe for Duration
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> DistinguishedMessage for Twhere
T: RawDistinguishedMessage + Message,
impl<T> DistinguishedMessage for Twhere
T: RawDistinguishedMessage + Message,
source§fn decode_distinguished<B>(buf: B) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
fn decode_distinguished<B>(buf: B) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
source§fn decode_distinguished_length_delimited<B>(
buf: B
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
fn decode_distinguished_length_delimited<B>(
buf: B
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
source§fn replace_distinguished_from<B>(
&mut self,
buf: B
) -> Result<Canonicity, DecodeError>where
B: Buf,
fn replace_distinguished_from<B>(
&mut self,
buf: B
) -> Result<Canonicity, DecodeError>where
B: Buf,
source§fn replace_distinguished_from_length_delimited<B>(
&mut self,
buf: B
) -> Result<Canonicity, DecodeError>where
B: Buf,
fn replace_distinguished_from_length_delimited<B>(
&mut self,
buf: B
) -> Result<Canonicity, DecodeError>where
B: Buf,
source§fn replace_distinguished_from_slice(
&mut self,
buf: &[u8]
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_from_slice( &mut self, buf: &[u8] ) -> Result<Canonicity, DecodeError>
source§fn replace_distinguished_from_dyn(
&mut self,
buf: &mut dyn Buf
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_from_dyn( &mut self, buf: &mut dyn Buf ) -> Result<Canonicity, DecodeError>
source§fn replace_distinguished_from_length_delimited_slice(
&mut self,
buf: &[u8]
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_from_length_delimited_slice( &mut self, buf: &[u8] ) -> Result<Canonicity, DecodeError>
source§fn replace_distinguished_from_length_delimited_dyn(
&mut self,
buf: &mut dyn Buf
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_from_length_delimited_dyn( &mut self, buf: &mut dyn Buf ) -> Result<Canonicity, DecodeError>
source§impl<T> Message for Twhere
T: RawMessage,
impl<T> Message for Twhere
T: RawMessage,
source§fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>
source§fn prepend<B>(&self, buf: &mut B)where
B: ReverseBuf + ?Sized,
fn prepend<B>(&self, buf: &mut B)where
B: ReverseBuf + ?Sized,
source§fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>
fn encode_length_delimited<B>(&self, buf: &mut B) -> Result<(), EncodeError>
source§fn decode<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
fn decode<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
source§fn decode_length_delimited<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
fn decode_length_delimited<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
source§fn replace_from<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
fn replace_from<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
source§fn replace_from_length_delimited<B>(
&mut self,
buf: B
) -> Result<(), DecodeError>where
B: Buf,
fn replace_from_length_delimited<B>(
&mut self,
buf: B
) -> Result<(), DecodeError>where
B: Buf,
source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
source§fn encode_to_bytes(&self) -> Bytes
fn encode_to_bytes(&self) -> Bytes
Bytes buffer.source§fn encode_fast(&self) -> ReverseBuffer
fn encode_fast(&self) -> ReverseBuffer
ReverseBuffer.source§fn encode_length_delimited_fast(&self) -> ReverseBuffer
fn encode_length_delimited_fast(&self) -> ReverseBuffer
ReverseBuffer.source§fn encode_dyn(&self, buf: &mut dyn BufMut) -> Result<(), EncodeError>
fn encode_dyn(&self, buf: &mut dyn BufMut) -> Result<(), EncodeError>
Bytes buffer.source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘ
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘ
source§fn encode_length_delimited_to_bytes(&self) -> Bytes
fn encode_length_delimited_to_bytes(&self) -> Bytes
Bytes buffer.source§fn encode_length_delimited_dyn(
&self,
buf: &mut dyn BufMut
) -> Result<(), EncodeError>
fn encode_length_delimited_dyn( &self, buf: &mut dyn BufMut ) -> Result<(), EncodeError>
Bytes buffer.