View Source Google.Protobuf (protobuf v0.15.0)
Utility functions for working with Google Protobuf structs.
Summary
Functions
Converts a Google.Protobuf.Timestamp struct to a DateTime struct.
Converts a Duration struct to a Google.Protobuf.Duration struct.
Converts a t:map() to a Google.Protobuf.Struct struct recursively
wrapping values in their Google.Protobuf.Value equivalents.
Converts a DateTime struct to a Google.Protobuf.Timestamp struct.
Converts a Google.Protobuf.Duration struct to a Duration struct.
Converts a Google.Protobuf.Struct struct to a t:map() recursively
converting values to their Elixir equivalents.
Functions
@spec from_datetime(DateTime.t()) :: Google.Protobuf.Timestamp.t()
Converts a Google.Protobuf.Timestamp struct to a DateTime struct.
## Examples
iex> from_datetime(~U[1970-01-01 00:00:05.000000Z])
%Google.Protobuf.Timestamp{seconds: 5, nanos: 0}
@spec from_duration(Duration.t()) :: Google.Protobuf.Duration.t()
Converts a Duration struct to a Google.Protobuf.Duration struct.
Requires
DurationThis function requires
Duration, which was introduced in Elixir 1.17.
Examples
iex> from_duration(Duration.new!(second: 1, microsecond: {500_000, 6}))
%Google.Protobuf.Duration{seconds: 1, nanos: 500_000_000}
iex> from_duration(Duration.new!(hour: 1, minute: 2, microsecond: {500_000, 6}))
%Google.Protobuf.Duration{seconds: 3720, nanos: 500_000_000}
iex> from_duration(Duration.new!(minute: 2, microsecond: {6_500_000, 6}))
%Google.Protobuf.Duration{seconds: 126, nanos: 500_000_000}
@spec from_map(map()) :: Google.Protobuf.Struct.t()
Converts a t:map() to a Google.Protobuf.Struct struct recursively
wrapping values in their Google.Protobuf.Value equivalents.
Examples
iex> from_map(%{})
%Google.Protobuf.Struct{}
@spec to_datetime(Google.Protobuf.Timestamp.t()) :: DateTime.t()
Converts a DateTime struct to a Google.Protobuf.Timestamp struct.
Note: Elixir DateTime.from_unix!/2 will convert units to
microseconds internally. Nanosecond precision is not guaranteed.
See examples for details.
Examples
iex> to_datetime(%Google.Protobuf.Timestamp{seconds: 5, nanos: 0})
~U[1970-01-01 00:00:05.000000Z]
iex> one = to_datetime(%Google.Protobuf.Timestamp{seconds: 10, nanos: 100})
...> two = to_datetime(%Google.Protobuf.Timestamp{seconds: 10, nanos: 105})
...> DateTime.diff(one, two, :nanosecond)
0
@spec to_duration(Google.Protobuf.Duration.t()) :: Duration.t()
Converts a Google.Protobuf.Duration struct to a Duration struct.
Requires
DurationThis function requires
Duration, which was introduced in Elixir 1.17.
Examples
iex> to_duration(%Google.Protobuf.Duration{seconds: 1, nanos: 500_000_000})
Duration.new!(second: 1, microsecond: {500_000, 6})
@spec to_map(Google.Protobuf.Struct.t()) :: map()
Converts a Google.Protobuf.Struct struct to a t:map() recursively
converting values to their Elixir equivalents.
Examples
iex> to_map(%Google.Protobuf.Struct{})
%{}
iex> to_map(%Google.Protobuf.Struct{
...> fields: %{
...> "key_one" => %Google.Protobuf.Value{
...> kind: {:string_value, "value_one"},
...> },
...> "key_two" => %Google.Protobuf.Value{
...> kind: {:number_value, 1234.0},
...> }
...> },
...> })
%{"key_one" => "value_one", "key_two" => 1234.0}