-module(oas@generator@lookup). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oas/generator/lookup.gleam"). -export([then/2, seq/1, fold/3, map_fold/3]). -export_type([lookup/1]). -type lookup(PJS) :: {lookup, binary(), fun((gleam@option:option(binary()), binary()) -> lookup(PJS))} | {done, PJS}. -file("src/oas/generator/lookup.gleam", 9). -spec then(lookup(PJT), fun((PJT) -> lookup(PJV))) -> lookup(PJV). then(Lookup, Next) -> case Lookup of {lookup, Ref, Inner} -> {lookup, Ref, fun(Mod, Name) -> then(Inner(Mod, Name), Next) end}; {done, Value} -> Next(Value) end. -file("src/oas/generator/lookup.gleam", 21). -spec do_seq(list(lookup(PLG)), list(PLG)) -> lookup(list(PLG)). do_seq(Lookups, Acc) -> case Lookups of [] -> {done, lists:reverse(Acc)}; [{done, Value} | Rest] -> do_seq(Rest, [Value | Acc]); [{lookup, Ref, Inner} | Rest@1] -> {lookup, Ref, fun(Mod, Name) -> do_seq([Inner(Mod, Name) | Rest@1], Acc) end} end. -file("src/oas/generator/lookup.gleam", 17). -spec seq(list(lookup(PJY))) -> lookup(list(PJY)). seq(Lookups) -> do_seq(Lookups, []). -file("src/oas/generator/lookup.gleam", 30). -spec fold(list(PKG), PKI, fun((PKI, PKG) -> lookup(PKI))) -> lookup(PKI). fold(Items, Initial, Func) -> case Items of [] -> {done, Initial}; [Next | Rest] -> then(Func(Initial, Next), fun(Acc) -> fold(Rest, Acc, Func) end) end. -file("src/oas/generator/lookup.gleam", 44). -spec map_fold(list(PKL), PKN, fun((PKN, PKL) -> lookup({PKN, PKO}))) -> lookup({PKN, list(PKO)}). map_fold(Items, Initial, Func) -> then( fold( Items, {Initial, []}, fun(Acc, Item) -> {Inner, Buffer} = Acc, then( Func(Inner, Item), fun(_use0) -> {Inner@1, Next} = _use0, {done, {Inner@1, [Next | Buffer]}} end ) end ), fun(_use0@1) -> {Inner@2, Buffer@1} = _use0@1, {done, {Inner@2, lists:reverse(Buffer@1)}} end ).