-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(PBX) :: {lookup, binary(), fun((gleam@option:option(binary()), binary()) -> lookup(PBX))} | {done, PBX}. -file("src/oas/generator/lookup.gleam", 9). -spec then(lookup(PBY), fun((PBY) -> lookup(PCA))) -> lookup(PCA). 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(PDL)), list(PDL)) -> lookup(list(PDL)). 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(PCD))) -> lookup(list(PCD)). seq(Lookups) -> do_seq(Lookups, []). -file("src/oas/generator/lookup.gleam", 30). -spec fold(list(PCL), PCN, fun((PCN, PCL) -> lookup(PCN))) -> lookup(PCN). 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(PCQ), PCS, fun((PCS, PCQ) -> lookup({PCS, PCT}))) -> lookup({PCS, list(PCT)}). 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 ).