Packages
erlcloud
2.2.8
3.8.3
3.8.2
3.8.1
3.7.6
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
3.6.8
3.6.7
3.6.5
3.6.4
3.6.3
3.6.2
3.6.1
3.6.0
3.5.16
3.5.15
3.5.14
3.5.13
3.5.12
3.5.11
3.5.10
3.5.9
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.4.5
3.4.3
3.4.1
3.4.0
3.3.9
3.3.8
3.3.7
3.3.6
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.18
3.2.17
3.2.16
3.2.15
3.2.14
3.2.13
3.2.12
3.2.11
3.2.10
3.2.7
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.17
3.1.16
3.1.14
3.1.13
3.1.12
3.1.11
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.2
2.2.1
2.2.0
2.1.0
2.0.5
2.0.4
2.0.3
2.0.0
0.13.10
0.13.9
0.13.8
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.0
0.12.0
0.11.0
0.9.2
0.9.2-rc.1
0.9.1
0.9.0
AWS APIs library for Erlang
Current section
Files
Jump to
Current section
Files
src/erlcloud_json.erl
-module(erlcloud_json).
-export([decode/2, decode/3]).
-include("erlcloud.hrl").
-type decode_value() :: {atom(), JsonField :: binary(), Type :: atom()}.
-type decode_value_r() :: {pos_integer(), JsonField :: binary(), Type :: atom()}.
-spec decode([decode_value()], proplist()) -> proplist().
decode(Values, Json) ->
lists:foldr(
fun ({Name, JsonField, Type}, Output) ->
case get_value(JsonField, Type, Json) of
undefined -> Output;
Value ->
[{Name, Value} | Output]
end
end, [], Values).
-spec decode([decode_value_r()], proplist(), tuple()) -> tuple().
decode(Values, Json, Record) ->
lists:foldr(
fun ({Index, JsonField, Type}, Output) ->
case get_value(JsonField, Type, Json) of
undefined -> Output;
Value -> setelement(Index, Output, Value)
end
end, Record, Values).
get_value(JsonField, Type, Json) ->
case Type of
optional_string -> proplists:get_value(JsonField, Json, undefined);
optional_integer -> proplists:get_value(JsonField, Json, undefined);
string -> proplists:get_value(JsonField, Json, "");
integer -> proplists:get_value(JsonField, Json, 0);
Fun when is_function(Fun, 1) ->
Fun(proplists:get_value(JsonField, Json));
{optional_map, Fun} when is_function(Fun, 1) ->
case proplists:get_value(JsonField, Json, []) of
[] -> undefined;
List when is_list(List) -> lists:map(Fun, List)
end;
{map, Fun} when is_function(Fun, 1) ->
lists:map(Fun, proplists:get_value(JsonField, Json, []))
end.