View Source Google.Protobuf (protobuf v0.14.1)

Utility functions for working with Google Protobuf structs.

Summary

Functions

Converts a Google.Protobuf.Timestamp struct to a DateTime 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.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_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_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}