-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_(OED, OEE) :: {function, list(gleamgen@parameter:parameter(gleamgen@type_:dynamic_())), gleamgen@type_:generated_type(OEE), gleamgen@expression:expression(OEE)} | {gleam_phantom, OED}. -file("src/gleamgen/function.gleam", 18). -spec new_dynamic( list(gleamgen@parameter:parameter(gleamgen@type_:dynamic_())), gleamgen@type_:generated_type(OEH), fun((list(gleamgen@expression:expression(gleamgen@type_:dynamic_()))) -> gleamgen@expression:expression(OEH)) ) -> function_(gleamgen@type_:dynamic_(), OEH). 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(OEO), fun(() -> gleamgen@expression:expression(OEO)) ) -> function_(fun(() -> OEO), OEO). new0(Returns, Handler) -> Body = Handler(), {function, [], Returns, Body}. -file("src/gleamgen/function.gleam", 40). -spec new1( gleamgen@parameter:parameter(OET), gleamgen@type_:generated_type(OEV), fun((gleamgen@expression:expression(OET)) -> gleamgen@expression:expression(OEV)) ) -> function_(fun((OET) -> OEV), OEV). 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(OFB), gleamgen@parameter:parameter(OFD), gleamgen@type_:generated_type(OFF), fun((gleamgen@expression:expression(OFB), gleamgen@expression:expression(OFD)) -> gleamgen@expression:expression(OFF)) ) -> function_(fun((OFB, OFD) -> OFF), OFF). 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(OFM), gleamgen@parameter:parameter(OFO), gleamgen@parameter:parameter(OFQ), gleamgen@type_:generated_type(OFS), fun((gleamgen@expression:expression(OFM), gleamgen@expression:expression(OFO), gleamgen@expression:expression(OFQ)) -> gleamgen@expression:expression(OFS)) ) -> function_(fun((OFM, OFO, OFQ) -> OFS), OFS). 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(OGA), gleamgen@parameter:parameter(OGC), gleamgen@parameter:parameter(OGE), gleamgen@parameter:parameter(OGG), gleamgen@type_:generated_type(OGI), fun((gleamgen@expression:expression(OGA), gleamgen@expression:expression(OGC), gleamgen@expression:expression(OGE), gleamgen@expression:expression(OGG)) -> gleamgen@expression:expression(OGI)) ) -> function_(fun((OGA, OGC, OGE, OGG) -> OGI), OGI). 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(OGR), gleamgen@parameter:parameter(OGT), gleamgen@parameter:parameter(OGV), gleamgen@parameter:parameter(OGX), gleamgen@parameter:parameter(OGZ), gleamgen@type_:generated_type(OHB), fun((gleamgen@expression:expression(OGR), gleamgen@expression:expression(OGT), gleamgen@expression:expression(OGV), gleamgen@expression:expression(OGX), gleamgen@expression:expression(OGZ)) -> gleamgen@expression:expression(OHB)) ) -> function_(fun((OGR, OGT, OGV, OGX, OGZ) -> OHB), OHB). 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(OHL), gleamgen@parameter:parameter(OHN), gleamgen@parameter:parameter(OHP), gleamgen@parameter:parameter(OHR), gleamgen@parameter:parameter(OHT), gleamgen@parameter:parameter(OHV), gleamgen@type_:generated_type(OHX), fun((gleamgen@expression:expression(OHL), gleamgen@expression:expression(OHN), gleamgen@expression:expression(OHP), gleamgen@expression:expression(OHR), gleamgen@expression:expression(OHT), gleamgen@expression:expression(OHV)) -> gleamgen@expression:expression(OHX)) ) -> function_(fun((OHL, OHN, OHP, OHR, OHT, OHV) -> OHX), OHX). 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(OII), gleamgen@parameter:parameter(OIK), gleamgen@parameter:parameter(OIM), gleamgen@parameter:parameter(OIO), gleamgen@parameter:parameter(OIQ), gleamgen@parameter:parameter(OIS), gleamgen@parameter:parameter(OIU), gleamgen@type_:generated_type(OIW), fun((gleamgen@expression:expression(OII), gleamgen@expression:expression(OIK), gleamgen@expression:expression(OIM), gleamgen@expression:expression(OIO), gleamgen@expression:expression(OIQ), gleamgen@expression:expression(OIS), gleamgen@expression:expression(OIU)) -> gleamgen@expression:expression(OIW)) ) -> function_(fun((OII, OIK, OIM, OIO, OIQ, OIS, OIU) -> OIW), OIW). 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(OJI), gleamgen@parameter:parameter(OJK), gleamgen@parameter:parameter(OJM), gleamgen@parameter:parameter(OJO), gleamgen@parameter:parameter(OJQ), gleamgen@parameter:parameter(OJS), gleamgen@parameter:parameter(OJU), gleamgen@parameter:parameter(OJW), gleamgen@type_:generated_type(OJY), fun((gleamgen@expression:expression(OJI), gleamgen@expression:expression(OJK), gleamgen@expression:expression(OJM), gleamgen@expression:expression(OJO), gleamgen@expression:expression(OJQ), gleamgen@expression:expression(OJS), gleamgen@expression:expression(OJU), gleamgen@expression:expression(OJW)) -> gleamgen@expression:expression(OJY)) ) -> function_(fun((OJI, OJK, OJM, OJO, OJQ, OJS, OJU, OJW) -> OJY), OJY). 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(OKL), gleamgen@parameter:parameter(OKN), gleamgen@parameter:parameter(OKP), gleamgen@parameter:parameter(OKR), gleamgen@parameter:parameter(OKT), gleamgen@parameter:parameter(OKV), gleamgen@parameter:parameter(OKX), gleamgen@parameter:parameter(OKZ), gleamgen@parameter:parameter(OLB), gleamgen@type_:generated_type(OLD), fun((gleamgen@expression:expression(OKL), gleamgen@expression:expression(OKN), gleamgen@expression:expression(OKP), gleamgen@expression:expression(OKR), gleamgen@expression:expression(OKT), gleamgen@expression:expression(OKV), gleamgen@expression:expression(OKX), gleamgen@expression:expression(OKZ), gleamgen@expression:expression(OLB)) -> gleamgen@expression:expression(OLD)) ) -> function_(fun((OKL, OKN, OKP, OKR, OKT, OKV, OKX, OKZ, OLB) -> OLD), OLD). 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_(OLY, any())) -> gleamgen@expression:expression(OLY). 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_ ).