-module(caffeine_lang@parser@artifacts). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/parser/artifacts.gleam"). -export([parse_standard_library/0, parse_from_json_file/1]). -export_type([artifact/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type artifact() :: {artifact, binary(), gleam@dict:dict(binary(), caffeine_lang@common@accepted_types:accepted_types())}. -file("src/caffeine_lang/parser/artifacts.gleam", 51). -spec parse_from_json_string(binary()) -> {ok, list(artifact())} | {error, gleam@json:decode_error()}. parse_from_json_string(Json_string) -> Artifact_decoder = begin gleam@dynamic@decode:field( <<"name"/utf8>>, caffeine_lang@common@decoders:non_empty_string_decoder(), fun(Name) -> gleam@dynamic@decode:field( <<"params"/utf8>>, gleam@dynamic@decode:dict( {decoder, fun gleam@dynamic@decode:decode_string/1}, caffeine_lang@common@decoders:accepted_types_decoder() ), fun(Params) -> gleam@dynamic@decode:success({artifact, Name, Params}) end ) end ) end, Artifacts_decoded = begin gleam@dynamic@decode:field( <<"artifacts"/utf8>>, gleam@dynamic@decode:list(Artifact_decoder), fun(Artifacts) -> gleam@dynamic@decode:success(Artifacts) end ) end, gleam@json:parse(Json_string, Artifacts_decoded). -file("src/caffeine_lang/parser/artifacts.gleam", 34). ?DOC(" The actual, common parsing logic.\n"). -spec internal_parse_from_json_string(binary()) -> {ok, list(artifact())} | {error, caffeine_lang@common@errors:compilation_error()}. internal_parse_from_json_string(Content) -> gleam@result:'try'(case parse_from_json_string(Content) of {ok, Artifacts} -> {ok, Artifacts}; {error, Err} -> {error, caffeine_lang@common@errors:format_json_decode_error(Err)} end, fun(Artifacts@1) -> gleam@result:'try'( caffeine_lang@common@validations:validate_relevant_uniqueness( Artifacts@1, fun(A) -> erlang:element(2, A) end, <<"artifact names"/utf8>> ), fun(_) -> {ok, Artifacts@1} end ) end). -file("src/caffeine_lang/parser/artifacts.gleam", 19). ?DOC(false). -spec parse_standard_library() -> {ok, list(artifact())} | {error, caffeine_lang@common@errors:compilation_error()}. parse_standard_library() -> internal_parse_from_json_string( <<" { \"artifacts\": [ { \"name\": \"SLO\", \"params\": { \"threshold\": \"Float { x | x in ( 0.0..100.0 ) }\", \"window_in_days\": \"Defaulted(Integer, 30) { x | x in { 7, 30, 90 } }\", \"queries\": \"Dict(String, String)\", \"value\": \"String\", \"vendor\": \"String { x | x in { datadog } }\" } }, { \"name\": \"DependencyRelation\", \"params\": { \"relation\": \"String { x | x in { soft, hard } }\", \"dependent\": \"String\" } } ] } "/utf8>> ). -file("src/caffeine_lang/parser/artifacts.gleam", 25). ?DOC(false). -spec parse_from_json_file(binary()) -> {ok, list(artifact())} | {error, caffeine_lang@common@errors:compilation_error()}. parse_from_json_file(File_path) -> gleam@result:'try'( caffeine_lang@common@helpers:json_from_file(File_path), fun(Json_string) -> internal_parse_from_json_string(Json_string) end ).