-module(pedantic@codec). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/pedantic/codec.gleam"). -export([custom/2, list/1, optional/1, dict/1, object/2, field/4, key_optional/4, default/2, key_with_default/5, build/1, refine/2, min/2, max/2, min_length/2, max_length/2, trim/1, lowercase/1, uppercase/1, collapse_whitespace/1, replace/3, remove_chars/2, allow_chars/2, strip_control_chars/1, normalize_email/1, normalize_uuid/1, default_if_blank/2, empty_as_none/1, positive/1, negative/1, non_negative/1, non_positive/1, length/2, email/2, uuid/2, check/3, assert_that/3, with_error_formatter/2, with_error_message/2, with_template/2, min_size/2, max_size/2, non_empty_list/1, title/2, describe/2, example/2]). -export_type([codec/1, object_builder/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. -type codec(FGR) :: {codec, pedantic@report:type_graph(), pedantic@decode:decoder(FGR), pedantic@encode:encoder(FGR)}. -opaque object_builder(FGS, FGT) :: {object_builder, pedantic@decode:object_builder(FGS, FGT), pedantic@encode:object_builder(FGT)}. -file("src/pedantic/codec.gleam", 26). ?DOC(" Bidirectional custom pair constructor.\n"). -spec custom(pedantic@decode:decoder(FGU), pedantic@encode:encoder(FGU)) -> codec(FGU). custom(Decoder, Encoder) -> {codec, erlang:element(2, Decoder), Decoder, Encoder}. -file("src/pedantic/codec.gleam", 93). ?DOC(" List combinator.\n"). -spec list(codec(FGY)) -> codec(list(FGY)). list(Element_codec) -> {codec, {list, erlang:element(2, Element_codec)}, pedantic@decode:list(erlang:element(3, Element_codec)), pedantic@encode:list(erlang:element(4, Element_codec))}. -file("src/pedantic/codec.gleam", 102). ?DOC(" Option/Optional combinator representing absent or nullable values.\n"). -spec optional(codec(FHC)) -> codec(gleam@option:option(FHC)). optional(Inner_codec) -> {codec, {option, erlang:element(2, Inner_codec)}, pedantic@decode:optional(erlang:element(3, Inner_codec)), pedantic@encode:optional(erlang:element(4, Inner_codec))}. -file("src/pedantic/codec.gleam", 111). ?DOC(" Dict combinator.\n"). -spec dict(codec(FHG)) -> codec(gleam@dict:dict(binary(), FHG)). dict(Value_codec) -> {codec, {dict, erlang:element(2, Value_codec)}, pedantic@decode:dict(erlang:element(3, Value_codec)), pedantic@encode:dict(erlang:element(4, Value_codec))}. -file("src/pedantic/codec.gleam", 120). ?DOC(" Initializes an ObjectBuilder for a custom record constructor.\n"). -spec object(binary(), FHL) -> object_builder(FHL, any()). object(Name, Constructor) -> {object_builder, pedantic@decode:object(Name, Constructor), pedantic@encode:object(Name)}. -file("src/pedantic/codec.gleam", 131). ?DOC(" Applies a field description, codec, and getter function to the object builder.\n"). -spec field( object_builder(fun((FHP) -> FHQ), FHR), binary(), codec(FHP), fun((FHR) -> FHP) ) -> object_builder(FHQ, FHR). field(Builder, Name, Field_codec, Get) -> {object_builder, pedantic@decode:field( erlang:element(2, Builder), Name, erlang:element(3, Field_codec) ), pedantic@encode:field( erlang:element(3, Builder), Name, erlang:element(4, Field_codec), Get )}. -file("src/pedantic/codec.gleam", 157). ?DOC(" Declares an optional key in the object builder, resolving to Option(t).\n"). -spec key_optional( object_builder(fun((gleam@option:option(FHX)) -> FHZ), FIA), binary(), codec(FHX), fun((FIA) -> gleam@option:option(FHX)) ) -> object_builder(FHZ, FIA). key_optional(Builder, Name, Field_codec, Get) -> Opt_codec = optional(Field_codec), field(Builder, Name, Opt_codec, Get). -file("src/pedantic/codec.gleam", 191). ?DOC(" Adapts an optional codec with a default value fallback.\n"). -spec default(codec(gleam@option:option(FIT)), FIT) -> codec(FIT). default(Codec, Default_val) -> New_decoder = pedantic@decode:default(erlang:element(3, Codec), Default_val), New_encoder = {encoder, erlang:element(2, erlang:element(4, Codec)), fun(Val) -> (erlang:element(3, erlang:element(4, Codec)))({some, Val}) end}, {codec, erlang:element(2, Codec), New_decoder, New_encoder}. -file("src/pedantic/codec.gleam", 168). ?DOC(" Declares an optional key with fallback default value.\n"). -spec key_with_default( object_builder(fun((FIH) -> FII), FIJ), binary(), codec(FIH), FIH, fun((FIJ) -> FIH) ) -> object_builder(FII, FIJ). key_with_default(Builder, Name, Field_codec, Default_val, Get) -> Opt_codec = begin _pipe = optional(Field_codec), default(_pipe, Default_val) end, field(Builder, Name, Opt_codec, Get). -file("src/pedantic/codec.gleam", 180). ?DOC(" Finalizes the ObjectBuilder, converting it into a full bidirectional Codec.\n"). -spec build(object_builder(FIP, FIP)) -> codec(FIP). build(Builder) -> Final_decoder = pedantic@decode:build(erlang:element(2, Builder)), Final_encoder = pedantic@encode:build(erlang:element(3, Builder)), {codec, erlang:element(2, Final_decoder), Final_decoder, Final_encoder}. -file("src/pedantic/codec.gleam", 205). ?DOC(" Refines a codec with custom validation rules.\n"). -spec refine( codec(FIX), fun((FIX) -> {ok, FIX} | {error, pedantic@report:error_kind()}) ) -> codec(FIX). refine(Codec, Rule) -> New_decoder = pedantic@decode:refine(erlang:element(3, Codec), Rule), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 214). ?DOC(" Restricts an Int codec to values greater than or equal to the minimum.\n"). -spec min(codec(integer()), integer()) -> codec(integer()). min(Codec, Minimum) -> New_decoder = pedantic@decode:min(erlang:element(3, Codec), Minimum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 220). ?DOC(" Restricts an Int codec to values less than or equal to the maximum.\n"). -spec max(codec(integer()), integer()) -> codec(integer()). max(Codec, Maximum) -> New_decoder = pedantic@decode:max(erlang:element(3, Codec), Maximum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 226). ?DOC(" Restricts a String codec to a minimum length.\n"). -spec min_length(codec(binary()), integer()) -> codec(binary()). min_length(Codec, Minimum) -> New_decoder = pedantic@decode:min_length(erlang:element(3, Codec), Minimum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 232). ?DOC(" Restricts a String codec to a maximum length.\n"). -spec max_length(codec(binary()), integer()) -> codec(binary()). max_length(Codec, Maximum) -> New_decoder = pedantic@decode:max_length(erlang:element(3, Codec), Maximum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 239). -spec trim(codec(binary())) -> codec(binary()). trim(Codec) -> New_decoder = pedantic@decode:trim(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 244). -spec lowercase(codec(binary())) -> codec(binary()). lowercase(Codec) -> New_decoder = pedantic@decode:lowercase(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 249). -spec uppercase(codec(binary())) -> codec(binary()). uppercase(Codec) -> New_decoder = pedantic@decode:uppercase(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 254). -spec collapse_whitespace(codec(binary())) -> codec(binary()). collapse_whitespace(Codec) -> New_decoder = pedantic@decode:collapse_whitespace(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 259). -spec replace(codec(binary()), binary(), binary()) -> codec(binary()). replace(Codec, Pattern, Replacement) -> New_decoder = pedantic@decode:replace( erlang:element(3, Codec), Pattern, Replacement ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 268). -spec remove_chars(codec(binary()), binary()) -> codec(binary()). remove_chars(Codec, Characters) -> New_decoder = pedantic@decode:remove_chars( erlang:element(3, Codec), Characters ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 273). -spec allow_chars(codec(binary()), binary()) -> codec(binary()). allow_chars(Codec, Characters) -> New_decoder = pedantic@decode:allow_chars( erlang:element(3, Codec), Characters ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 278). -spec strip_control_chars(codec(binary())) -> codec(binary()). strip_control_chars(Codec) -> New_decoder = pedantic@decode:strip_control_chars(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 283). -spec normalize_email(codec(binary())) -> codec(binary()). normalize_email(Codec) -> New_decoder = pedantic@decode:normalize_email(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 288). -spec normalize_uuid(codec(binary())) -> codec(binary()). normalize_uuid(Codec) -> New_decoder = pedantic@decode:normalize_uuid(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 293). -spec default_if_blank(codec(binary()), binary()) -> codec(binary()). default_if_blank(Codec, Default_value) -> New_decoder = pedantic@decode:default_if_blank( erlang:element(3, Codec), Default_value ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 301). -spec empty_as_none(codec(binary())) -> codec(gleam@option:option(binary())). empty_as_none(Codec) -> New_decoder = pedantic@decode:empty_as_none(erlang:element(3, Codec)), New_encoder = pedantic@encode:optional(erlang:element(4, Codec)), {codec, {option, erlang:element(2, Codec)}, New_decoder, New_encoder}. -file("src/pedantic/codec.gleam", 311). -spec positive(codec(integer())) -> codec(integer()). positive(Codec) -> New_decoder = pedantic@decode:positive(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 316). -spec negative(codec(integer())) -> codec(integer()). negative(Codec) -> New_decoder = pedantic@decode:negative(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 321). -spec non_negative(codec(integer())) -> codec(integer()). non_negative(Codec) -> New_decoder = pedantic@decode:non_negative(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 326). -spec non_positive(codec(integer())) -> codec(integer()). non_positive(Codec) -> New_decoder = pedantic@decode:non_positive(erlang:element(3, Codec)), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 331). -spec length(codec(binary()), integer()) -> codec(binary()). length(Codec, Len) -> New_decoder = pedantic@decode:length(erlang:element(3, Codec), Len), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 336). -spec email(codec(binary()), binary()) -> codec(binary()). email(Codec, Msg) -> New_decoder = pedantic@decode:email(erlang:element(3, Codec), Msg), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 341). -spec uuid(codec(binary()), binary()) -> codec(binary()). uuid(Codec, Msg) -> New_decoder = pedantic@decode:uuid(erlang:element(3, Codec), Msg), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 346). -spec check(codec(FKX), fun((FKX) -> boolean()), binary()) -> codec(FKX). check(Codec, Predicate, Msg) -> New_decoder = pedantic@decode:check( erlang:element(3, Codec), Predicate, Msg ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 355). -spec assert_that( codec(FLA), fun((FLA) -> boolean()), pedantic@report:error_kind() ) -> codec(FLA). assert_that(Codec, Predicate, Error) -> New_decoder = pedantic@decode:assert_that( erlang:element(3, Codec), Predicate, Error ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 364). -spec with_error_formatter( codec(FLD), fun((gleam@dynamic:dynamic_(), pedantic@report:error_kind()) -> binary()) ) -> codec(FLD). with_error_formatter(Codec, Formatter) -> New_decoder = pedantic@decode:with_error_formatter( erlang:element(3, Codec), Formatter ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 372). -spec with_error_message(codec(FLG), binary()) -> codec(FLG). with_error_message(Codec, Msg) -> New_decoder = pedantic@decode:with_error_message( erlang:element(3, Codec), Msg ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 377). -spec with_template(codec(FLJ), binary()) -> codec(FLJ). with_template(Codec, Template) -> New_decoder = pedantic@decode:with_template( erlang:element(3, Codec), Template ), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 382). -spec min_size(codec(list(FLM)), integer()) -> codec(list(FLM)). min_size(Codec, Minimum) -> New_decoder = pedantic@decode:min_size(erlang:element(3, Codec), Minimum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 387). -spec max_size(codec(list(FLR)), integer()) -> codec(list(FLR)). max_size(Codec, Maximum) -> New_decoder = pedantic@decode:max_size(erlang:element(3, Codec), Maximum), {codec, erlang:element(2, Codec), New_decoder, erlang:element(4, Codec)}. -file("src/pedantic/codec.gleam", 394). -spec non_empty_list(codec(FLW)) -> codec(list(FLW)). non_empty_list(Element_codec) -> New_decoder = pedantic@decode:non_empty_list( erlang:element(3, Element_codec) ), {codec, {list, erlang:element(2, Element_codec)}, New_decoder, pedantic@encode:list(erlang:element(4, Element_codec))}. -file("src/pedantic/codec.gleam", 406). ?DOC(" Sets the title metadata in the AST graph.\n"). -spec title(codec(FMA), binary()) -> codec(FMA). title(Codec, Name) -> New_decoder = pedantic@decode:title(erlang:element(3, Codec), Name), New_encoder = pedantic@encode:title(erlang:element(4, Codec), Name), {codec, erlang:element(2, New_decoder), New_decoder, New_encoder}. -file("src/pedantic/codec.gleam", 413). ?DOC(" Sets the description metadata in the AST graph.\n"). -spec describe(codec(FMD), binary()) -> codec(FMD). describe(Codec, Desc) -> New_decoder = pedantic@decode:describe(erlang:element(3, Codec), Desc), New_encoder = pedantic@encode:describe(erlang:element(4, Codec), Desc), {codec, erlang:element(2, New_decoder), New_decoder, New_encoder}. -file("src/pedantic/codec.gleam", 420). ?DOC(" Sets the example metadata in the AST graph.\n"). -spec example(codec(FMG), gleam@dynamic:dynamic_()) -> codec(FMG). example(Codec, Ex) -> New_decoder = pedantic@decode:example(erlang:element(3, Codec), Ex), New_encoder = pedantic@encode:example(erlang:element(4, Codec), Ex), {codec, erlang:element(2, New_decoder), New_decoder, New_encoder}.