-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.