Current section
Files
Jump to
Current section
Files
src/jsonlogic.erl
-module(jsonlogic).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/jsonlogic.gleam").
-export([apply/2, apply_dynamic/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/jsonlogic.gleam", 25).
?DOC(
" Apply a JSONLogic rule to dynamic data.\n"
"\n"
" This function parses the string rule via `json.parse` and then\n"
" evaluates it using `jsonlogic.apply_dynamic`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" jsonlogic.apply(\n"
" \"{ \\\"var\\\" : \\\"a\\\" }\",\n"
" dynamic.properties([\n"
" #(dynamic.string(\"a\"), dynamic.int(1)),\n"
" #(dynamic.string(\"b\"), dynamic.int(2)),\n"
" ]),\n"
" )\n"
" // -> 1\n"
" ```\n"
).
-spec apply(binary(), gleam@dynamic:dynamic_()) -> {ok,
gleam@dynamic:dynamic_()} |
{error, jsonlogic@error:evaluation_error()}.
apply(Rule, Data) ->
_pipe = jsonlogic@internal@decoding:decode_rule_string(Rule),
gleam@result:'try'(
_pipe,
fun(_capture) ->
jsonlogic@internal@evaluation:evaluate(_capture, Data)
end
).
-file("src/jsonlogic.gleam", 65).
?DOC(
" Apply a dynamic JSONLogic rule to dynamic data.\n"
"\n"
" This function should be used when the rule is already parsed via `json.parse`\n"
" or other means.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" let rules =\n"
" \"\n"
" { \\\"and\\\" : [\n"
" {\\\"<\\\" : [ { \\\"var\\\" : \\\"temp\\\" }, 110 ]},\n"
" {\\\"==\\\" : [ { \\\"var\\\" : \\\"pie.filling\\\" }, \\\"apple\\\" ] }\n"
" ] }\n"
" \"\n"
"\n"
" let data =\n"
" dynamic.properties([\n"
" #(dynamic.string(\"temp\"), dynamic.int(100)),\n"
" #(\n"
" dynamic.string(\"pie\"),\n"
" dynamic.properties([\n"
" #(dynamic.string(\"filling\"), dynamic.string(\"apple\")),\n"
" ]),\n"
" ),\n"
" ])\n"
"\n"
" use parsed_rules <- result.map(json.parse(rules, decode.dynamic))\n"
" jsonlogic.apply_dynamic(parsed_rules, data)\n"
" // -> Ok(True)\n"
" ```\n"
).
-spec apply_dynamic(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> {ok,
gleam@dynamic:dynamic_()} |
{error, jsonlogic@error:evaluation_error()}.
apply_dynamic(Rule, Data) ->
_pipe = jsonlogic@internal@decoding:decode_rule(Rule),
gleam@result:'try'(
_pipe,
fun(_capture) ->
jsonlogic@internal@evaluation:evaluate(_capture, Data)
end
).