33 lines
1.2 KiB
Erlang
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.
|