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.
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;
}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 ForOverwrite<(), Duration> for ()
impl ForOverwrite<(), Duration> for ()
Source§fn for_overwrite() -> __Self
fn for_overwrite() -> __Self
Self value to be overwritten.Source§impl PartialOrd for Duration
impl PartialOrd for Duration
Source§impl<'__a> RawDistinguishedMessageBorrowDecoder<'__a> for __Selfwhere
(): DistinguishedBorrowDecoder<'__a, fixed, i32> + DistinguishedBorrowDecoder<'__a, general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
Self: Eq,
impl<'__a> RawDistinguishedMessageBorrowDecoder<'__a> for __Selfwhere
(): DistinguishedBorrowDecoder<'__a, fixed, i32> + DistinguishedBorrowDecoder<'__a, general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
Self: Eq,
fn raw_borrow_decode_field_distinguished( &mut self, tag: u32, wire_type: WireType, duplicated: bool, buf: Capped<'_, &'__a [u8]>, ctx: RestrictedDecodeContext, ) -> Result<Canonicity, DecodeError>
Source§impl RawDistinguishedMessageDecoder for __Selfwhere
(): DistinguishedDecoder<fixed, i32> + DistinguishedDecoder<general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
Self: Eq,
impl RawDistinguishedMessageDecoder for __Selfwhere
(): DistinguishedDecoder<fixed, i32> + DistinguishedDecoder<general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
Self: Eq,
fn raw_decode_field_distinguished<__B>( &mut self, tag: u32, wire_type: WireType, duplicated: bool, buf: Capped<'_, __B>, ctx: RestrictedDecodeContext, ) -> Result<Canonicity, DecodeError>
Source§impl RawMessage for __Self
impl RawMessage for __Self
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_encoded_len(&self) -> usize
fn raw_encoded_len(&self) -> usize
Source§impl<'__a> RawMessageBorrowDecoder<'__a> for __Selfwhere
(): BorrowDecoder<'__a, fixed, i32> + BorrowDecoder<'__a, general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
impl<'__a> RawMessageBorrowDecoder<'__a> for __Selfwhere
(): BorrowDecoder<'__a, fixed, i32> + BorrowDecoder<'__a, general, i64> + EmptyState<fixed, i32> + EmptyState<general, i64>,
Source§fn raw_borrow_decode_field(
&mut self,
tag: u32,
wire_type: WireType,
duplicated: bool,
buf: Capped<'_, &'__a [u8]>,
ctx: DecodeContext,
) -> Result<(), DecodeError>
fn raw_borrow_decode_field( &mut self, tag: u32, wire_type: WireType, duplicated: bool, buf: Capped<'_, &'__a [u8]>, ctx: DecodeContext, ) -> Result<(), DecodeError>
self from a borrowed slice.Source§impl RawMessageDecoder for __Self
impl RawMessageDecoder for __Self
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.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<'a, T> BorrowedMessage<'a> for Twhere
T: RawMessageBorrowDecoder<'a>,
impl<'a, T> BorrowedMessage<'a> for Twhere
T: RawMessageBorrowDecoder<'a>,
Source§fn decode_borrowed(buf: &'a [u8]) -> Result<T, DecodeError>
fn decode_borrowed(buf: &'a [u8]) -> Result<T, DecodeError>
Source§fn decode_borrowed_length_delimited(
buf: &mut &'a [u8],
) -> Result<T, DecodeError>
fn decode_borrowed_length_delimited( buf: &mut &'a [u8], ) -> Result<T, DecodeError>
Source§fn replace_borrowed_from(&mut self, buf: &'a [u8]) -> Result<(), DecodeError>
fn replace_borrowed_from(&mut self, buf: &'a [u8]) -> Result<(), DecodeError>
Source§fn replace_borrowed_from_length_delimited(
&mut self,
buf: &mut &'a [u8],
) -> Result<(), DecodeError>
fn replace_borrowed_from_length_delimited( &mut self, buf: &mut &'a [u8], ) -> Result<(), DecodeError>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<'a, T> DistinguishedBorrowedMessage<'a> for Twhere
T: RawDistinguishedMessageBorrowDecoder<'a> + RawMessageBorrowDecoder<'a>,
impl<'a, T> DistinguishedBorrowedMessage<'a> for Twhere
T: RawDistinguishedMessageBorrowDecoder<'a> + RawMessageBorrowDecoder<'a>,
Source§fn decode_distinguished_borrowed(
buf: &'a [u8],
) -> Result<(T, Canonicity), DecodeError>
fn decode_distinguished_borrowed( buf: &'a [u8], ) -> Result<(T, Canonicity), DecodeError>
Source§fn decode_distinguished_borrowed_length_delimited(
buf: &mut &'a [u8],
) -> Result<(T, Canonicity), DecodeError>
fn decode_distinguished_borrowed_length_delimited( buf: &mut &'a [u8], ) -> Result<(T, Canonicity), DecodeError>
Source§fn replace_distinguished_borrowed_from(
&mut self,
buf: &'a [u8],
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_borrowed_from( &mut self, buf: &'a [u8], ) -> Result<Canonicity, DecodeError>
Source§fn replace_distinguished_borrowed_from_length_delimited(
&mut self,
buf: &mut &'a [u8],
) -> Result<Canonicity, DecodeError>
fn replace_distinguished_borrowed_from_length_delimited( &mut self, buf: &mut &'a [u8], ) -> Result<Canonicity, DecodeError>
Source§fn decode_restricted_borrowed(
buf: &'a [u8],
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>
fn decode_restricted_borrowed( buf: &'a [u8], restrict_to: Canonicity, ) -> Result<(T, Canonicity), DecodeError>
Source§fn decode_restricted_borrowed_length_delimited(
buf: &mut &'a [u8],
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>
fn decode_restricted_borrowed_length_delimited( buf: &mut &'a [u8], restrict_to: Canonicity, ) -> Result<(T, Canonicity), DecodeError>
Source§fn replace_restricted_borrowed_from(
&mut self,
buf: &'a [u8],
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_borrowed_from( &mut self, buf: &'a [u8], restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn replace_restricted_borrowed_from_length_delimited(
&mut self,
buf: &mut &'a [u8],
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_borrowed_from_length_delimited( &mut self, buf: &mut &'a [u8], restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn decode_canonical_borrowed(buf: &'a [u8]) -> Result<T, DecodeError>
fn decode_canonical_borrowed(buf: &'a [u8]) -> Result<T, DecodeError>
Source§fn decode_canonical_borrowed_length_delimited(
buf: &mut &'a [u8],
) -> Result<T, DecodeError>
fn decode_canonical_borrowed_length_delimited( buf: &mut &'a [u8], ) -> Result<T, DecodeError>
Source§fn replace_canonical_borrowed_from(
&mut self,
buf: &'a [u8],
) -> Result<(), DecodeError>
fn replace_canonical_borrowed_from( &mut self, buf: &'a [u8], ) -> Result<(), DecodeError>
Source§fn replace_canonical_borrowed_from_length_delimited(
&mut self,
buf: &mut &'a [u8],
) -> Result<(), DecodeError>
fn replace_canonical_borrowed_from_length_delimited( &mut self, buf: &mut &'a [u8], ) -> Result<(), DecodeError>
Source§impl<T> DistinguishedOwnedMessage for Twhere
T: RawDistinguishedMessageDecoder + RawMessageDecoder,
impl<T> DistinguishedOwnedMessage for Twhere
T: RawDistinguishedMessageDecoder + RawMessageDecoder,
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§fn decode_restricted<B>(
buf: B,
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
fn decode_restricted<B>(
buf: B,
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
Source§fn decode_restricted_length_delimited<B>(
buf: B,
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
fn decode_restricted_length_delimited<B>(
buf: B,
restrict_to: Canonicity,
) -> Result<(T, Canonicity), DecodeError>where
B: Buf,
fn decode_restricted_capped<B>( buf: Capped<'_, B>, restrict_to: Canonicity, ) -> Result<(T, Canonicity), DecodeError>
Source§fn replace_restricted_from<B>(
&mut self,
buf: B,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>where
B: Buf,
fn replace_restricted_from<B>(
&mut self,
buf: B,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>where
B: Buf,
Source§fn replace_restricted_from_length_delimited<B>(
&mut self,
buf: B,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>where
B: Buf,
fn replace_restricted_from_length_delimited<B>(
&mut self,
buf: B,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>where
B: Buf,
fn replace_restricted_from_capped<B>( &mut self, buf: Capped<'_, B>, restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn replace_restricted_from_slice(
&mut self,
buf: &[u8],
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_from_slice( &mut self, buf: &[u8], restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn replace_restricted_from_dyn(
&mut self,
buf: &mut dyn Buf,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_from_dyn( &mut self, buf: &mut dyn Buf, restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn replace_restricted_from_length_delimited_slice(
&mut self,
buf: &[u8],
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_from_length_delimited_slice( &mut self, buf: &[u8], restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn replace_restricted_from_length_delimited_dyn(
&mut self,
buf: &mut dyn Buf,
restrict_to: Canonicity,
) -> Result<Canonicity, DecodeError>
fn replace_restricted_from_length_delimited_dyn( &mut self, buf: &mut dyn Buf, restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
fn replace_restricted_from_capped_dyn( &mut self, buf: Capped<'_, dyn Buf>, restrict_to: Canonicity, ) -> Result<Canonicity, DecodeError>
Source§fn decode_canonical<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
fn decode_canonical<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
Source§fn decode_canonical_length_delimited<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
fn decode_canonical_length_delimited<B>(buf: B) -> Result<T, DecodeError>where
B: Buf,
Source§fn replace_canonical_from<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
fn replace_canonical_from<B>(&mut self, buf: B) -> Result<(), DecodeError>where
B: Buf,
Source§fn replace_canonical_from_length_delimited<B>(
&mut self,
buf: B,
) -> Result<(), DecodeError>where
B: Buf,
fn replace_canonical_from_length_delimited<B>(
&mut self,
buf: B,
) -> Result<(), DecodeError>where
B: Buf,
Source§fn replace_canonical_from_slice(
&mut self,
buf: &[u8],
) -> Result<(), DecodeError>
fn replace_canonical_from_slice( &mut self, buf: &[u8], ) -> Result<(), DecodeError>
Source§fn replace_canonical_from_dyn(
&mut self,
buf: &mut dyn Buf,
) -> Result<(), DecodeError>
fn replace_canonical_from_dyn( &mut self, buf: &mut dyn Buf, ) -> Result<(), DecodeError>
Source§fn replace_canonical_from_length_delimited_slice(
&mut self,
buf: &[u8],
) -> Result<(), DecodeError>
fn replace_canonical_from_length_delimited_slice( &mut self, buf: &[u8], ) -> Result<(), DecodeError>
Source§fn replace_canonical_from_length_delimited_dyn(
&mut self,
buf: &mut dyn Buf,
) -> Result<(), DecodeError>
fn replace_canonical_from_length_delimited_dyn( &mut self, buf: &mut dyn Buf, ) -> Result<(), 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 message_is_empty(&self) -> bool
fn message_is_empty(&self) -> bool
Source§fn clear_message(&mut self)
fn clear_message(&mut self)
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_contiguous(&self) -> ReverseBuffer
fn encode_contiguous(&self) -> ReverseBuffer
RevserseBuffer which will have exactly the required capacity
in one contiguous slice.Source§fn encode_length_delimited_contiguous(&self) -> ReverseBuffer
fn encode_length_delimited_contiguous(&self) -> ReverseBuffer
RevserseBuffer which will have
exactly the required capacity in one contiguous slice.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.