Struct prost_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.
§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: i64
Signed 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: i32
Signed 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§
Trait Implementations§
source§impl Message for Duration
impl Message for Duration
source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
source§fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>
fn encode<B>(&self, buf: &mut B) -> Result<(), EncodeError>
source§fn encode_to_vec(&self) -> Vec<u8>where
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8>where
Self: 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 encode_length_delimited_to_vec(&self) -> Vec<u8>where
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8>where
Self: Sized,
source§fn decode<B>(buf: B) -> Result<Self, DecodeError>
fn decode<B>(buf: B) -> Result<Self, DecodeError>
source§fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>
fn decode_length_delimited<B>(buf: B) -> Result<Self, DecodeError>
source§fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>
fn merge<B>(&mut self, buf: B) -> Result<(), DecodeError>
self
. Read moresource§fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>
fn merge_length_delimited<B>(&mut self, buf: B) -> Result<(), DecodeError>
self
.source§impl Name for Duration
impl Name for Duration
source§const PACKAGE: &'static str = PACKAGE
const PACKAGE: &'static str = PACKAGE
.
, e.g. google.protobuf
.source§const NAME: &'static str = "Duration"
const NAME: &'static str = "Duration"
Message
.
This name is the same as it appears in the source .proto file, e.g. FooBar
.source§fn type_url() -> String
fn type_url() -> String
Message
, which by default is the full name with a
leading slash, but may also include a leading domain name, e.g.
type.googleapis.com/google.profile.Person
.
This can be used when serializing with the [Any
] type.source§fn full_name() -> String
fn full_name() -> String
Message
.
It’s prefixed with the package name and names of any parent messages,
e.g. google.rpc.BadRequest.FieldViolation
.
By default, this is the package name followed by the message name.
Fully-qualified names must be unique within a domain of Type URLs.source§impl PartialEq for Duration
impl PartialEq for Duration
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.