-module(gleamgen@function). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/gleamgen/function.gleam"). -export([new_dynamic/3, new0/2, new1/3, new2/4, new3/5, new4/6, new5/7, new6/8, new7/9, new8/10, new9/11, to_dynamic/1, get_function_name/1, render/3, anonymous/1]). -export_type([function_/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 function_(OEK, OEL) :: {function, list(gleamgen@parameter:parameter(gleamgen@type_:dynamic_())), gleamgen@type_:generated_type(OEL), gleamgen@expression:expression(OEL)} | {gleam_phantom, OEK}. -file("src/gleamgen/function.gleam", 18). -spec new_dynamic( list(gleamgen@parameter:parameter(gleamgen@type_:dynamic_())), gleamgen@type_:generated_type(OEO), fun((list(gleamgen@expression:expression(gleamgen@type_:dynamic_()))) -> gleamgen@expression:expression(OEO)) ) -> function_(gleamgen@type_:dynamic_(), OEO). new_dynamic(Parameters, Returns, Handler) -> Body = Handler( begin _pipe = Parameters, gleam@list:map( _pipe, fun(Param) -> gleamgen@expression:raw(gleamgen@parameter:name(Param)) end ) end ), {function, Parameters, Returns, Body}. -file("src/gleamgen/function.gleam", 32). -spec new0( gleamgen@type_:generated_type(OEV), fun(() -> gleamgen@expression:expression(OEV)) ) -> function_(fun(() -> OEV), OEV). new0(Returns, Handler) -> Body = Handler(), {function, [], Returns, Body}. -file("src/gleamgen/function.gleam", 40). -spec new1( gleamgen@parameter:parameter(OFA), gleamgen@type_:generated_type(OFC), fun((gleamgen@expression:expression(OFA)) -> gleamgen@expression:expression(OFC)) ) -> function_(fun((OFA) -> OFC), OFC). new1(Param1, Returns, Handler) -> Body = Handler(gleamgen@expression:raw(gleamgen@parameter:name(Param1))), {function, [gleamgen_ffi:identity(Param1)], Returns, Body}. -file("src/gleamgen/function.gleam", 53). -spec new2( gleamgen@parameter:parameter(OFI), gleamgen@parameter:parameter(OFK), gleamgen@type_:generated_type(OFM), fun((gleamgen@expression:expression(OFI), gleamgen@expression:expression(OFK)) -> gleamgen@expression:expression(OFM)) ) -> function_(fun((OFI, OFK) -> OFM), OFM). new2(Param1, Param2, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2)], Returns, Body}. -file("src/gleamgen/function.gleam", 78). -spec new3( gleamgen@parameter:parameter(OFT), gleamgen@parameter:parameter(OFV), gleamgen@parameter:parameter(OFX), gleamgen@type_:generated_type(OFZ), fun((gleamgen@expression:expression(OFT), gleamgen@expression:expression(OFV), gleamgen@expression:expression(OFX)) -> gleamgen@expression:expression(OFZ)) ) -> function_(fun((OFT, OFV, OFX) -> OFZ), OFZ). new3(Param1, Param2, Param3, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3)], Returns, Body}. -file("src/gleamgen/function.gleam", 107). -spec new4( gleamgen@parameter:parameter(OGH), gleamgen@parameter:parameter(OGJ), gleamgen@parameter:parameter(OGL), gleamgen@parameter:parameter(OGN), gleamgen@type_:generated_type(OGP), fun((gleamgen@expression:expression(OGH), gleamgen@expression:expression(OGJ), gleamgen@expression:expression(OGL), gleamgen@expression:expression(OGN)) -> gleamgen@expression:expression(OGP)) ) -> function_(fun((OGH, OGJ, OGL, OGN) -> OGP), OGP). new4(Param1, Param2, Param3, Param4, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4)], Returns, Body}. -file("src/gleamgen/function.gleam", 140). -spec new5( gleamgen@parameter:parameter(OGY), gleamgen@parameter:parameter(OHA), gleamgen@parameter:parameter(OHC), gleamgen@parameter:parameter(OHE), gleamgen@parameter:parameter(OHG), gleamgen@type_:generated_type(OHI), fun((gleamgen@expression:expression(OGY), gleamgen@expression:expression(OHA), gleamgen@expression:expression(OHC), gleamgen@expression:expression(OHE), gleamgen@expression:expression(OHG)) -> gleamgen@expression:expression(OHI)) ) -> function_(fun((OGY, OHA, OHC, OHE, OHG) -> OHI), OHI). new5(Param1, Param2, Param3, Param4, Param5, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)), gleamgen@expression:raw(gleamgen@parameter:name(Param5)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4), gleamgen_ffi:identity(Param5)], Returns, Body}. -file("src/gleamgen/function.gleam", 177). -spec new6( gleamgen@parameter:parameter(OHS), gleamgen@parameter:parameter(OHU), gleamgen@parameter:parameter(OHW), gleamgen@parameter:parameter(OHY), gleamgen@parameter:parameter(OIA), gleamgen@parameter:parameter(OIC), gleamgen@type_:generated_type(OIE), fun((gleamgen@expression:expression(OHS), gleamgen@expression:expression(OHU), gleamgen@expression:expression(OHW), gleamgen@expression:expression(OHY), gleamgen@expression:expression(OIA), gleamgen@expression:expression(OIC)) -> gleamgen@expression:expression(OIE)) ) -> function_(fun((OHS, OHU, OHW, OHY, OIA, OIC) -> OIE), OIE). new6(Param1, Param2, Param3, Param4, Param5, Param6, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)), gleamgen@expression:raw(gleamgen@parameter:name(Param5)), gleamgen@expression:raw(gleamgen@parameter:name(Param6)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4), gleamgen_ffi:identity(Param5), gleamgen_ffi:identity(Param6)], Returns, Body}. -file("src/gleamgen/function.gleam", 218). -spec new7( gleamgen@parameter:parameter(OIP), gleamgen@parameter:parameter(OIR), gleamgen@parameter:parameter(OIT), gleamgen@parameter:parameter(OIV), gleamgen@parameter:parameter(OIX), gleamgen@parameter:parameter(OIZ), gleamgen@parameter:parameter(OJB), gleamgen@type_:generated_type(OJD), fun((gleamgen@expression:expression(OIP), gleamgen@expression:expression(OIR), gleamgen@expression:expression(OIT), gleamgen@expression:expression(OIV), gleamgen@expression:expression(OIX), gleamgen@expression:expression(OIZ), gleamgen@expression:expression(OJB)) -> gleamgen@expression:expression(OJD)) ) -> function_(fun((OIP, OIR, OIT, OIV, OIX, OIZ, OJB) -> OJD), OJD). new7(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Returns, Handler) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)), gleamgen@expression:raw(gleamgen@parameter:name(Param5)), gleamgen@expression:raw(gleamgen@parameter:name(Param6)), gleamgen@expression:raw(gleamgen@parameter:name(Param7)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4), gleamgen_ffi:identity(Param5), gleamgen_ffi:identity(Param6), gleamgen_ffi:identity(Param7)], Returns, Body}. -file("src/gleamgen/function.gleam", 266). -spec new8( gleamgen@parameter:parameter(OJP), gleamgen@parameter:parameter(OJR), gleamgen@parameter:parameter(OJT), gleamgen@parameter:parameter(OJV), gleamgen@parameter:parameter(OJX), gleamgen@parameter:parameter(OJZ), gleamgen@parameter:parameter(OKB), gleamgen@parameter:parameter(OKD), gleamgen@type_:generated_type(OKF), fun((gleamgen@expression:expression(OJP), gleamgen@expression:expression(OJR), gleamgen@expression:expression(OJT), gleamgen@expression:expression(OJV), gleamgen@expression:expression(OJX), gleamgen@expression:expression(OJZ), gleamgen@expression:expression(OKB), gleamgen@expression:expression(OKD)) -> gleamgen@expression:expression(OKF)) ) -> function_(fun((OJP, OJR, OJT, OJV, OJX, OJZ, OKB, OKD) -> OKF), OKF). new8( Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Returns, Handler ) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)), gleamgen@expression:raw(gleamgen@parameter:name(Param5)), gleamgen@expression:raw(gleamgen@parameter:name(Param6)), gleamgen@expression:raw(gleamgen@parameter:name(Param7)), gleamgen@expression:raw(gleamgen@parameter:name(Param8)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4), gleamgen_ffi:identity(Param5), gleamgen_ffi:identity(Param6), gleamgen_ffi:identity(Param7), gleamgen_ffi:identity(Param8)], Returns, Body}. -file("src/gleamgen/function.gleam", 318). -spec new9( gleamgen@parameter:parameter(OKS), gleamgen@parameter:parameter(OKU), gleamgen@parameter:parameter(OKW), gleamgen@parameter:parameter(OKY), gleamgen@parameter:parameter(OLA), gleamgen@parameter:parameter(OLC), gleamgen@parameter:parameter(OLE), gleamgen@parameter:parameter(OLG), gleamgen@parameter:parameter(OLI), gleamgen@type_:generated_type(OLK), fun((gleamgen@expression:expression(OKS), gleamgen@expression:expression(OKU), gleamgen@expression:expression(OKW), gleamgen@expression:expression(OKY), gleamgen@expression:expression(OLA), gleamgen@expression:expression(OLC), gleamgen@expression:expression(OLE), gleamgen@expression:expression(OLG), gleamgen@expression:expression(OLI)) -> gleamgen@expression:expression(OLK)) ) -> function_(fun((OKS, OKU, OKW, OKY, OLA, OLC, OLE, OLG, OLI) -> OLK), OLK). new9( Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Returns, Handler ) -> Body = Handler( gleamgen@expression:raw(gleamgen@parameter:name(Param1)), gleamgen@expression:raw(gleamgen@parameter:name(Param2)), gleamgen@expression:raw(gleamgen@parameter:name(Param3)), gleamgen@expression:raw(gleamgen@parameter:name(Param4)), gleamgen@expression:raw(gleamgen@parameter:name(Param5)), gleamgen@expression:raw(gleamgen@parameter:name(Param6)), gleamgen@expression:raw(gleamgen@parameter:name(Param7)), gleamgen@expression:raw(gleamgen@parameter:name(Param8)), gleamgen@expression:raw(gleamgen@parameter:name(Param9)) ), {function, [gleamgen_ffi:identity(Param1), gleamgen_ffi:identity(Param2), gleamgen_ffi:identity(Param3), gleamgen_ffi:identity(Param4), gleamgen_ffi:identity(Param5), gleamgen_ffi:identity(Param6), gleamgen_ffi:identity(Param7), gleamgen_ffi:identity(Param8), gleamgen_ffi:identity(Param9)], Returns, Body}. -file("src/gleamgen/function.gleam", 379). -spec to_dynamic(function_(any(), any())) -> function_(gleamgen@type_:dynamic_(), gleamgen@type_:dynamic_()). to_dynamic(Type_) -> gleamgen_ffi:identity(Type_). -file("src/gleamgen/function.gleam", 386). ?DOC(false). -spec get_function_name(any()) -> binary(). get_function_name(Type_) -> gleamgen_ffi:get_function_name(Type_). -file("src/gleamgen/function.gleam", 405). -spec render( function_(any(), any()), gleamgen@internal@render:context(), gleam@option:option(binary()) ) -> gleamgen@internal@render:rendered(). render(Func, Context, Name) -> Is_anonymous = gleam@option:is_none(Name), Rendered_params = gleamgen@parameter:render_parameters( erlang:element(2, Func), not Is_anonymous, Context ), Rendered_type = gleamgen@type_:render_type(erlang:element(3, Func), Context), Rendered_body = gleamgen@expression:render( erlang:element(4, Func), {context, erlang:element(2, Context), erlang:element(3, Context), false} ), {Rendered_name, Force_newlines} = case Name of {some, Name@1} -> {glam@doc:from_string(<<" "/utf8, Name@1/binary>>), true}; none -> {{concat, []}, false} end, _pipe = glam@doc:concat( [glam@doc:from_string(<<"fn"/utf8>>), Rendered_name, erlang:element(2, Rendered_params), {break, <<" "/utf8>>, <<""/utf8>>}, case Rendered_type of {ok, Returned} -> glam@doc:concat( [glam@doc:from_string(<<"->"/utf8>>), {break, <<" "/utf8>>, <<""/utf8>>}, erlang:element(2, Returned), {break, <<" "/utf8>>, <<""/utf8>>}] ); {error, _} -> {concat, []} end, gleamgen@internal@render:body( erlang:element(2, Rendered_body), Force_newlines )] ), {render, _pipe, gleamgen@internal@render:merge_details_many( [erlang:element(3, Rendered_params), begin _pipe@1 = Rendered_type, _pipe@2 = gleam@result:map( _pipe@1, fun(T) -> erlang:element(3, T) end ), gleam@result:unwrap( _pipe@2, {rendered_details, [], [], {report, [], []}} ) end, erlang:element(3, Rendered_body)] )}. -file("src/gleamgen/function.gleam", 388). -spec anonymous(function_(OMF, any())) -> gleamgen@expression:expression(OMF). anonymous(Function) -> Type_ = begin _pipe = erlang:element(2, Function), _pipe@1 = gleam@list:map(_pipe, fun gleamgen@parameter:type_/1), _pipe@3 = gleamgen@type_:dynamic_function( _pipe@1, begin _pipe@2 = erlang:element(3, Function), gleamgen_ffi:identity(_pipe@2) end ), gleamgen_ffi:identity(_pipe@3) end, Renderer = fun(Context) -> render(Function, Context, none) end, gleamgen@expression:new_anonymous_function( Renderer, gleamgen_ffi:identity(erlang:element(4, Function)), erlang:element(2, Function), Type_ ).