[
https://issues.apache.org/jira/browse/THRIFT-1321?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Louis-Philippe Gauthier updated THRIFT-1321:
--------------------------------------------
Description:
dict:fold/3 always return ValData as a list and therefore breaks the pattern
matching.
{quote}
Dict = dict:new(),
Dict2 = dict:append("key1", "value1", Dict),
Dict3 = dict:append("key2", [1,2,3], Dict2),
Dict4 = dict:append("key3", <<"value3">>, Dict3),
dict:fold(fun(Key, Value, AccIn) -> io:format("~p : ~p~n", [Key, Value]) end,
[], Dict4).
"key1" : ["value1"]
"key2" : [[1,2,3]]
"key3" : [<<"value3">>]
{quote}
was:
{quote}
diff --git a/lib/erl/src/thrift_protocol.erl b/lib/erl/src/thrift_protocol.erl
index 193b07a..3a97a86 100644
--- a/lib/erl/src/thrift_protocol.erl
+++ b/lib/erl/src/thrift_protocol.erl
@@ -358,7 +358,7 @@ write(Proto0, {{map, KeyType, ValType}, Data}) ->
vtype = term_to_typeid(ValType),
size = dict:size(Data)
}),
- Proto2 = dict:fold(fun(KeyData, ValData, ProtoS0) ->
+ Proto2 = dict:fold(fun(KeyData, [ValData], ProtoS0) ->
{ProtoS1, ok} = write(ProtoS0, {KeyType,
KeyData}),
{ProtoS2, ok} = write(ProtoS1, {ValType,
ValData}),
ProtoS2
{quote}
dict:fold/3 always return ValData as a list and therefore breaks the pattern
matching.
{quote}
Dict = dict:new(),
Dict2 = dict:append("key1", "value1", Dict),
Dict3 = dict:append("key2", [1,2,3], Dict2),
Dict4 = dict:append("key3", <<"value3">>, Dict3),
dict:fold(fun(Key, Value, AccIn) -> io:format("~p : ~p~n", [Key, Value]) end,
[], Dict4).
"key1" : ["value1"]
"key2" : [[1,2,3]]
"key3" : [<<"value3">>]
{quote}
> Map serialization is broken in the Erlang library
> -------------------------------------------------
>
> Key: THRIFT-1321
> URL: https://issues.apache.org/jira/browse/THRIFT-1321
> Project: Thrift
> Issue Type: Bug
> Components: Erlang - Library
> Affects Versions: 0.7
> Reporter: Louis-Philippe Gauthier
> Attachments: bug.diff
>
>
> dict:fold/3 always return ValData as a list and therefore breaks the pattern
> matching.
> {quote}
> Dict = dict:new(),
> Dict2 = dict:append("key1", "value1", Dict),
> Dict3 = dict:append("key2", [1,2,3], Dict2),
> Dict4 = dict:append("key3", <<"value3">>, Dict3),
> dict:fold(fun(Key, Value, AccIn) -> io:format("~p : ~p~n", [Key, Value]) end,
> [], Dict4).
> "key1" : ["value1"]
> "key2" : [[1,2,3]]
> "key3" : [<<"value3">>]
> {quote}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira