-module(fp2@codec). -compile(no_auto_import). -export([int/0, float/0, string/0, bool/0, codec1/2, codec2/3, codec3/4]). -export_type([codec/1]). -type codec(ENE) :: {codec, fun((ENE) -> gleam@json:json()), fun((gleam@dynamic:dynamic()) -> {ok, ENE} | {error, list(gleam@dynamic:decode_error())})}. -spec int() -> codec(integer()). int() -> {codec, fun gleam@json:int/1, fun gleam@dynamic:int/1}. -spec float() -> codec(float()). float() -> {codec, fun gleam@json:float/1, fun gleam@dynamic:float/1}. -spec string() -> codec(binary()). string() -> {codec, fun gleam@json:string/1, fun gleam@dynamic:string/1}. -spec bool() -> codec(boolean()). bool() -> {codec, fun gleam@json:bool/1, fun gleam@dynamic:bool/1}. -spec codec1(fp2@defunc:defunc1(ENN, ENO), codec(ENN)) -> codec(ENO). codec1(Defunc, Codec1) -> {codec, fun(Value) -> Value@1 = (erlang:element(3, Defunc))(Value), {Name1} = erlang:element(4, Defunc), _pipe = [{Name1, (erlang:element(2, Codec1))(erlang:element(1, Value@1))}], gleam@json:object(_pipe) end, fun(Dyn) -> {Name1@1} = erlang:element(4, Defunc), _pipe@1 = Dyn, _pipe@2 = (gleam@dynamic:field(Name1@1, erlang:element(3, Codec1)))( _pipe@1 ), gleam@result:map(_pipe@2, erlang:element(2, Defunc)) end}. -spec codec2(fp2@defunc:defunc2(ENT, ENU, ENV), codec(ENT), codec(ENU)) -> codec(ENV). codec2(Defunc, Codec1, Codec2) -> {codec, fun(Value) -> Value@1 = (erlang:element(3, Defunc))(Value), {Name1, Name2} = erlang:element(4, Defunc), _pipe = [{Name1, (erlang:element(2, Codec1))(erlang:element(1, Value@1))}, {Name2, (erlang:element(2, Codec2))(erlang:element(2, Value@1))}], gleam@json:object(_pipe) end, fun(Dyn) -> {Name1@1, Name2@1} = erlang:element(4, Defunc), _pipe@1 = Dyn, (gleam@dynamic:decode2( erlang:element(2, Defunc), gleam@dynamic:field(Name1@1, erlang:element(3, Codec1)), gleam@dynamic:field(Name2@1, erlang:element(3, Codec2)) ))(_pipe@1) end}. -spec codec3( fp2@defunc:defunc3(EOC, EOD, EOE, EOF), codec(EOC), codec(EOD), codec(EOE) ) -> codec(EOF). codec3(Defunc, Codec1, Codec2, Codec3) -> {codec, fun(Value) -> Value@1 = (erlang:element(3, Defunc))(Value), {Name1, Name2, Name3} = erlang:element(4, Defunc), _pipe = [{Name1, (erlang:element(2, Codec1))(erlang:element(1, Value@1))}, {Name2, (erlang:element(2, Codec2))(erlang:element(2, Value@1))}, {Name3, (erlang:element(2, Codec3))(erlang:element(3, Value@1))}], gleam@json:object(_pipe) end, fun(Dyn) -> {Name1@1, Name2@1, Name3@1} = erlang:element(4, Defunc), _pipe@1 = Dyn, (gleam@dynamic:decode3( erlang:element(2, Defunc), gleam@dynamic:field(Name1@1, erlang:element(3, Codec1)), gleam@dynamic:field(Name2@1, erlang:element(3, Codec2)), gleam@dynamic:field(Name3@1, erlang:element(3, Codec3)) ))(_pipe@1) end}.