blob: 9584c2d7e8a5d8444928b0e266a8b4e17d65eaca [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(mango_json).
-export([
min/0,
max/0,
cmp/2,
cmp_raw/2,
type/1,
special/1,
to_binary/1
]).
-define(MIN_VAL, mango_json_min).
-define(MAX_VAL, mango_json_max).
min() ->
?MIN_VAL.
max() ->
?MAX_VAL.
cmp(?MIN_VAL, ?MIN_VAL) ->
0;
cmp(?MIN_VAL, _) ->
-1;
cmp(_, ?MIN_VAL) ->
1;
cmp(?MAX_VAL, ?MAX_VAL) ->
0;
cmp(?MAX_VAL, _) ->
1;
cmp(_, ?MAX_VAL) ->
-1;
cmp(A, B) ->
couch_ejson_compare:less(A, B).
cmp_raw(?MIN_VAL, ?MIN_VAL) ->
0;
cmp_raw(?MIN_VAL, _) ->
-1;
cmp_raw(_, ?MIN_VAL) ->
1;
cmp_raw(?MAX_VAL, ?MAX_VAL) ->
0;
cmp_raw(?MAX_VAL, _) ->
1;
cmp_raw(_, ?MAX_VAL) ->
-1;
cmp_raw(A, B) ->
case A < B of
true ->
-1;
false ->
case A > B of
true ->
1;
false ->
0
end
end.
type(null) ->
<<"null">>;
type(Bool) when is_boolean(Bool) ->
<<"boolean">>;
type(Num) when is_number(Num) ->
<<"number">>;
type(Str) when is_binary(Str) ->
<<"string">>;
type({Props}) when is_list(Props) ->
<<"object">>;
type(Vals) when is_list(Vals) ->
<<"array">>.
special(?MIN_VAL) ->
true;
special(?MAX_VAL) ->
true;
special(_) ->
false.
to_binary({Props}) ->
Pred = fun({Key, Value}) ->
{to_binary(Key), to_binary(Value)}
end,
{lists:map(Pred, Props)};
to_binary(Data) when is_list(Data) ->
[to_binary(D) || D <- Data];
to_binary(null) ->
null;
to_binary(true) ->
true;
to_binary(false) ->
false;
to_binary(Data) when is_atom(Data) ->
list_to_binary(atom_to_list(Data));
to_binary(Data) when is_number(Data) ->
Data;
to_binary(Data) when is_binary(Data) ->
Data.