Packages
protox
1.6.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-dev
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
retired
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
A fast, easy to use and 100% conformant Elixir library for Google Protocol Buffers (aka protobuf)
Current section
Files
Jump to
Current section
Files
lib/google/protobuf/struct.ex
# Proto definition
# https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/struct.proto
# JSON encoding
# https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#struct
defmodule Protox.Google.Protobuf.Struct do
@moduledoc false
use Protox.Define,
enums: [],
messages: [
{
Google.Protobuf.Struct,
:proto3,
[
Protox.Field.new!(
kind: :map,
label: nil,
name: :fields,
tag: 1,
type: {:string, {:message, Google.Protobuf.Value}}
)
]
}
]
end
defimpl Protox.JsonMessageDecoder, for: Google.Protobuf.Struct do
def decode_message(initial_message, value) when is_map(value) do
fields =
value
|> Stream.map(fn {key, value} when is_binary(key) ->
{key, Protox.JsonMessageDecoder.decode_message(%Google.Protobuf.Value{}, value)}
end)
|> Enum.into(%{})
struct!(initial_message, fields: fields)
end
end
defimpl Protox.JsonMessageEncoder, for: Google.Protobuf.Struct do
def encode_message(%Google.Protobuf.Struct{} = msg, json_encode) do
json_map =
msg.fields
|> Stream.map(fn {key, value} ->
encoded_value = Protox.JsonMessageEncoder.encode_message(value, json_encode)
"\"#{key}\": #{encoded_value}"
end)
|> Enum.join(",")
["{", json_map, "}"]
end
end