File tree Expand file tree Collapse file tree 2 files changed +48
-2
lines changed
Expand file tree Collapse file tree 2 files changed +48
-2
lines changed Original file line number Diff line number Diff line change 11defmodule Protobuf.Any do
2- @ moduledoc false
32
3+ @ moduledoc """
4+ Provides functions for working with the `google.protobuf.Any` type.
5+ """
6+ @ moduledoc since: "0.16.0"
7+
8+ @ type_url_prefix "type.googleapis.com/"
9+
10+ @ doc """
11+ Packs a Protobuf message into a `Google.Protobuf.Any` message.
12+
13+ ## Example
14+
15+ message = MyPkg.MyMessage.new(%{field: "value"})
16+ any = Protobuf.Any.pack(message)
17+ #=> %Google.Protobuf.Any{
18+ #=> type_url: "type.googleapis.com/my_pkg.MyMessage",
19+ #=> value: <<...>>
20+ #=> }
21+
22+ """
23+ @ spec pack ( struct ( ) ) :: Google.Protobuf.Any . t ( )
24+ def pack ( % mod { } = data ) do
25+ % Google.Protobuf.Any {
26+ type_url: "#{ @ type_url_prefix } #{ mod . full_name ( ) } " ,
27+ value: mod . encode ( data )
28+ }
29+ end
30+
31+ @ doc false
432 @ spec type_url_to_module ( String . t ( ) ) :: module ( )
533 def type_url_to_module ( type_url ) when is_binary ( type_url ) do
634 case type_url do
7- "type.googleapis.com/" <> package_and_message ->
35+ @ type_url_prefix <> package_and_message ->
836 package_and_message
937 |> String . split ( "." )
1038 |> Enum . map ( & Macro . camelize / 1 )
Original file line number Diff line number Diff line change 11defmodule Protobuf.AnyTest do
22 use ExUnit.Case , async: true
33
4+ doctest Protobuf.Any
5+
6+ describe "pack/1" do
7+ test "packs a message into Any" do
8+ message = % Google.Protobuf.Duration { seconds: 42 }
9+ assert % Google.Protobuf.Any { } = result = Protobuf.Any . pack ( message )
10+ assert result . type_url == "type.googleapis.com/google.protobuf.Duration"
11+ assert result . value == Google.Protobuf.Duration . encode ( message )
12+ end
13+
14+ test "packs a message into Any with a prefix" do
15+ message = % My.Test.Request.SomeGroup { group_field: 42 }
16+ assert % Google.Protobuf.Any { } = result = Protobuf.Any . pack ( message )
17+ assert result . type_url == "type.googleapis.com/test.Request.SomeGroup"
18+ assert result . value == My.Test.Request.SomeGroup . encode ( message )
19+ end
20+ end
21+
422 describe "type_url_to_module/1" do
523 test "returns the module for a valid type_url" do
624 assert Protobuf.Any . type_url_to_module ( "type.googleapis.com/google.protobuf.Duration" ) ==
You can’t perform that action at this time.
0 commit comments