-module(gleamgen@function). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/gleamgen/function.gleam"). -export([new_raw/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_(NMA, NMB) :: {function, list(gleamgen@parameter:parameter(gleamgen@types:dynamic_())), gleamgen@types:generated_type(NMB), gleamgen@expression:expression(NMB)} | {gleam_phantom, NMA}. -file("src/gleamgen/function.gleam", 18). -spec new_raw( list(gleamgen@parameter:parameter(gleamgen@types:dynamic_())), gleamgen@types:generated_type(NME), fun((list(gleamgen@expression:expression(gleamgen@types:dynamic_()))) -> gleamgen@expression:expression(NME)) ) -> function_(gleamgen@types:dynamic_(), NME). new_raw(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@types:generated_type(NML), fun(() -> gleamgen@expression:expression(NML)) ) -> function_(fun((any()) -> NML), NML). new0(Returns, Handler) -> Body = Handler(), {function, [], Returns, Body}. -file("src/gleamgen/function.gleam", 40). -spec new1( gleamgen@parameter:parameter(NMR), gleamgen@types:generated_type(NMT), fun((gleamgen@expression:expression(NMR)) -> gleamgen@expression:expression(NMT)) ) -> function_(fun((NMR) -> NMT), NMT). 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(NMZ), gleamgen@parameter:parameter(NNB), gleamgen@types:generated_type(NND), fun((gleamgen@expression:expression(NMZ), gleamgen@expression:expression(NNB)) -> gleamgen@expression:expression(NND)) ) -> function_(fun((NMZ, NNB) -> NND), NND). 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(NNK), gleamgen@parameter:parameter(NNM), gleamgen@parameter:parameter(NNO), gleamgen@types:generated_type(NNQ), fun((gleamgen@expression:expression(NNK), gleamgen@expression:expression(NNM), gleamgen@expression:expression(NNO)) -> gleamgen@expression:expression(NNQ)) ) -> function_(fun((NNK, NNM, NNO) -> NNQ), NNQ). 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(NNY), gleamgen@parameter:parameter(NOA), gleamgen@parameter:parameter(NOC), gleamgen@parameter:parameter(NOE), gleamgen@types:generated_type(NOG), fun((gleamgen@expression:expression(NNY), gleamgen@expression:expression(NOA), gleamgen@expression:expression(NOC), gleamgen@expression:expression(NOE)) -> gleamgen@expression:expression(NOG)) ) -> function_(fun((NNY, NOA, NOC, NOE) -> NOG), NOG). 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(NOP), gleamgen@parameter:parameter(NOR), gleamgen@parameter:parameter(NOT), gleamgen@parameter:parameter(NOV), gleamgen@parameter:parameter(NOX), gleamgen@types:generated_type(NOZ), fun((gleamgen@expression:expression(NOP), gleamgen@expression:expression(NOR), gleamgen@expression:expression(NOT), gleamgen@expression:expression(NOV), gleamgen@expression:expression(NOX)) -> gleamgen@expression:expression(NOZ)) ) -> function_(fun((NOP, NOR, NOT, NOV, NOX) -> NOZ), NOZ). 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(NPJ), gleamgen@parameter:parameter(NPL), gleamgen@parameter:parameter(NPN), gleamgen@parameter:parameter(NPP), gleamgen@parameter:parameter(NPR), gleamgen@parameter:parameter(NPT), gleamgen@types:generated_type(NPV), fun((gleamgen@expression:expression(NPJ), gleamgen@expression:expression(NPL), gleamgen@expression:expression(NPN), gleamgen@expression:expression(NPP), gleamgen@expression:expression(NPR), gleamgen@expression:expression(NPT)) -> gleamgen@expression:expression(NPV)) ) -> function_(fun((NPJ, NPL, NPN, NPP, NPR, NPT) -> NPV), NPV). 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(NQG), gleamgen@parameter:parameter(NQI), gleamgen@parameter:parameter(NQK), gleamgen@parameter:parameter(NQM), gleamgen@parameter:parameter(NQO), gleamgen@parameter:parameter(NQQ), gleamgen@parameter:parameter(NQS), gleamgen@types:generated_type(NQU), fun((gleamgen@expression:expression(NQG), gleamgen@expression:expression(NQI), gleamgen@expression:expression(NQK), gleamgen@expression:expression(NQM), gleamgen@expression:expression(NQO), gleamgen@expression:expression(NQQ), gleamgen@expression:expression(NQS)) -> gleamgen@expression:expression(NQU)) ) -> function_(fun((NQG, NQI, NQK, NQM, NQO, NQQ, NQS) -> NQU), NQU). 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(NRG), gleamgen@parameter:parameter(NRI), gleamgen@parameter:parameter(NRK), gleamgen@parameter:parameter(NRM), gleamgen@parameter:parameter(NRO), gleamgen@parameter:parameter(NRQ), gleamgen@parameter:parameter(NRS), gleamgen@parameter:parameter(NRU), gleamgen@types:generated_type(NRW), fun((gleamgen@expression:expression(NRG), gleamgen@expression:expression(NRI), gleamgen@expression:expression(NRK), gleamgen@expression:expression(NRM), gleamgen@expression:expression(NRO), gleamgen@expression:expression(NRQ), gleamgen@expression:expression(NRS), gleamgen@expression:expression(NRU)) -> gleamgen@expression:expression(NRW)) ) -> function_(fun((NRG, NRI, NRK, NRM, NRO, NRQ, NRS, NRU) -> NRW), NRW). 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(NSJ), gleamgen@parameter:parameter(NSL), gleamgen@parameter:parameter(NSN), gleamgen@parameter:parameter(NSP), gleamgen@parameter:parameter(NSR), gleamgen@parameter:parameter(NST), gleamgen@parameter:parameter(NSV), gleamgen@parameter:parameter(NSX), gleamgen@parameter:parameter(NSZ), gleamgen@types:generated_type(NTB), fun((gleamgen@expression:expression(NSJ), gleamgen@expression:expression(NSL), gleamgen@expression:expression(NSN), gleamgen@expression:expression(NSP), gleamgen@expression:expression(NSR), gleamgen@expression:expression(NST), gleamgen@expression:expression(NSV), gleamgen@expression:expression(NSX), gleamgen@expression:expression(NSZ)) -> gleamgen@expression:expression(NTB)) ) -> function_(fun((NSJ, NSL, NSN, NSP, NSR, NST, NSV, NSX, NSZ) -> NTB), NTB). 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@types:dynamic_(), gleamgen@types: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", 400). -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@types:render_type(erlang:element(3, Func)), Rendered_body = gleamgen@expression:render( erlang:element(4, Func), {context, erlang:element(2, 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_(NTW, any())) -> gleamgen@expression:expression(NTW). anonymous(Function) -> Type_ = begin _pipe = erlang:element(2, Function), _pipe@1 = gleam@list:map(_pipe, fun gleamgen@parameter:type_/1), _pipe@3 = gleamgen@types: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, Type_).