Packages

A CEL (Common Expression Language) parser and interpreter in pure Gleam

Current section

Files

Jump to
cel src cel@interpreter.erl
Raw

src/cel@interpreter.erl

-module(cel@interpreter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([default_context/0, new/1, execute/2]).
-export_type([program/0]).
-opaque program() :: {program, cel@parser:expression()}.
-file("/Users/jonas/src/personal/cel-gleam/src/cel/interpreter.gleam", 14).
-spec default_context() -> cel@interpreter@context:context().
default_context() ->
_pipe = cel@interpreter@context:empty(),
_pipe@1 = cel@interpreter@context:insert_function(
_pipe,
<<"filter"/utf8>>,
fun cel@interpreter@function:filter/1
),
_pipe@2 = cel@interpreter@context:insert_function(
_pipe@1,
<<"map"/utf8>>,
fun cel@interpreter@function:map/1
),
_pipe@3 = cel@interpreter@context:insert_function(
_pipe@2,
<<"all"/utf8>>,
fun cel@interpreter@function:all/1
),
_pipe@4 = cel@interpreter@context:insert_function(
_pipe@3,
<<"size"/utf8>>,
fun cel@interpreter@function:size/1
),
_pipe@5 = cel@interpreter@context:insert_function(
_pipe@4,
<<"has"/utf8>>,
fun cel@interpreter@function:has/1
),
_pipe@6 = cel@interpreter@context:insert_function(
_pipe@5,
<<"exists"/utf8>>,
fun cel@interpreter@function:exists/1
),
cel@interpreter@context:insert_function(
_pipe@6,
<<"exists_one"/utf8>>,
fun cel@interpreter@function:exists_one/1
).
-file("/Users/jonas/src/personal/cel-gleam/src/cel/interpreter.gleam", 25).
-spec new(binary()) -> {ok, program()} | {error, cel@parser:error()}.
new(Source) ->
gleam@result:map(
cel@parser:parse(Source),
fun(Parsed) -> {program, Parsed} end
).
-file("/Users/jonas/src/personal/cel-gleam/src/cel/interpreter.gleam", 30).
-spec execute(program(), cel@interpreter@context:context()) -> {ok,
cel@interpreter@value:value()} |
{error, cel@interpreter@error:execution_error()}.
execute(Program, Ctx) ->
cel@interpreter@evaluate:evaluate_expr(erlang:element(2, Program), Ctx).