Native OCaml Rego/OPA policy engine
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

rego: add Data_error variant with semantic loc, drop raw Json.Error.t leak

Per the ocaml-encodings skill, consumer libraries should not expose
raw Json.Error.t in their public error type. [Data_error] carries a
plain string reason and an optional string loc, extracted from
Json.Error.t at the boundary via [data_error_of_json_error].

+13 -1
+13 -1
lib/rego.ml
··· 30 30 31 31 type error = 32 32 | Parse_error of string 33 + | Data_error of { reason : string; loc : string option } 33 34 | Eval_error of string 34 35 | Type_error of string 35 36 36 37 let pp_error ppf = function 37 38 | Parse_error s -> Fmt.pf ppf "parse error: %s" s 39 + | Data_error { reason; loc = None } -> Fmt.pf ppf "data error: %s" reason 40 + | Data_error { reason; loc = Some loc } -> 41 + Fmt.pf ppf "data error at %s: %s" loc reason 38 42 | Eval_error s -> Fmt.pf ppf "eval error: %s" s 39 43 | Type_error s -> Fmt.pf ppf "type error: %s" s 44 + 45 + let data_error_of_json_error (e : Json.Error.t) = 46 + let _ctx, meta, _kind = e in 47 + let tl = Json.Meta.textloc meta in 48 + let loc = 49 + if Loc.is_none tl then None else Some (Fmt.str "%a" Loc.pp tl) 50 + in 51 + Data_error { reason = Json.Error.to_string e; loc } 40 52 41 53 (** {1 Parsing} *) 42 54 ··· 82 94 | Ok v -> 83 95 add_data e v; 84 96 Ok () 85 - | Error msg -> Error (Parse_error (Json.Error.to_string msg)) 97 + | Error msg -> Error (data_error_of_json_error msg) 86 98 87 99 let add_policy e ~name source = 88 100 match parse_module source with