-module(string_builder). -compile(no_auto_import). -export([new/1, string_formatter/1, string/2, arg_string_formatter/1, arg_string/1, int_formatter/1, int/2, arg_int_formatter/1, arg_int/1, int_list_formatter/1, int_list/2, arg_int_list_formatter/1, arg_int_list/1, identity/1, compose/2, end0/1, end1/1, end2/1, end3/1, end4/1, end5/1]). new(Callback) -> Callback(<<""/utf8>>). string_formatter(Str) -> fun(Callback) -> Callback(Str) end. string(Previous, Str) -> compose(Previous, string_formatter(Str)). arg_string_formatter(Callback) -> fun(Str) -> Callback(Str) end. arg_string(Previous) -> compose(Previous, fun arg_string_formatter/1). int_formatter(N) -> fun(Callback) -> Callback(gleam@int:to_string(N)) end. int(Previous, N) -> compose(Previous, int_formatter(N)). arg_int_formatter(Callback) -> fun(Int) -> Callback(gleam@int:to_string(Int)) end. arg_int(Previous) -> compose(Previous, fun arg_int_formatter/1). format_int_list(L) -> gleam@string:join( gleam@list:map(L, fun gleam@int:to_string/1), <<", "/utf8>> ). int_list_formatter(L) -> fun(Callback) -> Callback(format_int_list(L)) end. int_list(Previous, L) -> compose(Previous, int_list_formatter(L)). arg_int_list_formatter(Callback) -> fun(L) -> Callback(format_int_list(L)) end. arg_int_list(Previous) -> compose(Previous, fun arg_int_list_formatter/1). identity(S) -> S. compose(Previous, Next) -> fun(Callback) -> Previous( fun(PreviousStr) -> Next( fun(NextStr) -> Callback(gleam@string:append(PreviousStr, NextStr)) end ) end ) end. uncurry2(Fun) -> fun(A, B) -> (Fun(A))(B) end. uncurry3(Fun) -> fun(A, B, C) -> ((Fun(A))(B))(C) end. uncurry4(Fun) -> fun(A, B, C, D) -> (((Fun(A))(B))(C))(D) end. uncurry5(Fun) -> fun(A, B, C, D, E) -> ((((Fun(A))(B))(C))(D))(E) end. end0(Formatter) -> fun() -> Formatter(fun identity/1) end. end1(Formatter) -> Formatter(fun identity/1). end2(Formatter) -> uncurry2(Formatter(fun identity/1)). end3(Formatter) -> uncurry3(Formatter(fun identity/1)). end4(Formatter) -> uncurry4(Formatter(fun identity/1)). end5(Formatter) -> uncurry5(Formatter(fun identity/1)).