XENOS/src/json_validate.erl

33 lines
1.2 KiB
Erlang

-module(json_validate).
-export([validate_activity/1, load_schema/1]).
load_schema(SchemaName) ->
Filename = "priv/" ++ SchemaName ++ ".json",
{ok, Bin} = file:read_file(Filename),
jsx:decode(Bin, [return_maps]).
validate_activity(JsonBin) ->
case catch jsx:decode(JsonBin, [return_maps]) of
{'EXIT', _} ->
{error, malformed_json};
JsonMap when is_map(JsonMap) ->
case maps:get(<<"type">>, JsonMap, undefined) of
undefined ->
{error, missing_type};
TypeBin when is_binary(TypeBin) ->
TypeLower = string:lowercase(binary_to_list(TypeBin)),
case TypeLower of
"note" ->
Schema = load_schema("note"),
case jesse:validate_with_schema(Schema, JsonMap) of
{ok, _} -> ok;
{error, Errors} -> {error, Errors}
end;
OtherType ->
{error, {unsupported_type, TypeBin}}
end;
_ ->
{error, invalid_type_field}
end
end.