Packages
protox
1.7.4
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)
Retired package: Release invalid - Deps reference a non-existing repository
Current section
Files
Jump to
Current section
Files
lib/google/protobuf/value.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#value
defmodule Protox.Google.Protobuf.Value do
@moduledoc false
use Protox.Define,
enums: [],
messages: [
%Protox.Message{
name: Google.Protobuf.Value,
syntax: :proto3,
fields: [
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :null_value,
tag: 1,
type: {:enum, Google.Protobuf.NullValue}
),
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :number_value,
tag: 2,
type: :double
),
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :string_value,
tag: 3,
type: :string
),
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :bool_value,
tag: 4,
type: :bool
),
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :struct_value,
tag: 5,
type: {:message, Google.Protobuf.Struct}
),
Protox.Field.new!(
kind: {:oneof, :kind},
label: :optional,
name: :list_value,
tag: 6,
type: {:message, Google.Protobuf.ListValue}
)
]
}
]
end
defimpl Protox.JsonMessageDecoder, for: Google.Protobuf.Value do
def decode_message(initial_message, value) when is_boolean(value) do
struct!(initial_message, kind: {:bool_value, value})
end
def decode_message(initial_message, nil = _value) do
struct!(initial_message, kind: {:null_value, :NULL_VALUE})
end
def decode_message(initial_message, value) when is_binary(value) do
struct!(initial_message, kind: {:string_value, value})
end
def decode_message(initial_message, value) when is_number(value) do
struct!(initial_message, kind: {:number_value, value})
end
def decode_message(initial_message, value) when is_list(value) do
list_value = Protox.JsonMessageDecoder.decode_message(%Google.Protobuf.ListValue{}, value)
struct!(initial_message, kind: {:list_value, list_value})
end
def decode_message(initial_message, value) when is_map(value) do
struct_value = Protox.JsonMessageDecoder.decode_message(%Google.Protobuf.Struct{}, value)
struct!(initial_message, kind: {:struct_value, struct_value})
end
end
defimpl Protox.JsonMessageEncoder, for: Google.Protobuf.Value do
def encode_message(%Google.Protobuf.Value{kind: {kind, value}}, json_encode)
when kind in [:bool_value, :string_value, :number_value] do
json_encode.(value)
end
def encode_message(%Google.Protobuf.Value{kind: {:null_value, :NULL_VALUE}}, json_encode) do
json_encode.(nil)
end
def encode_message(
%Google.Protobuf.Value{kind: {:list_value, %Google.Protobuf.ListValue{} = list_value}},
json_encode
) do
Protox.JsonMessageEncoder.encode_message(list_value, json_encode)
end
def encode_message(
%Google.Protobuf.Value{kind: {:struct_value, %Google.Protobuf.Struct{} = struct_value}},
json_encode
) do
Protox.JsonMessageEncoder.encode_message(struct_value, json_encode)
end
def encode_message(%Google.Protobuf.Value{kind: _}, _json_encode) do
raise Protox.JsonEncodingError.new("invalid field :kind for Value")
end
end