Skip to content

Commit

Permalink
add FiguraFuture::andThen
Browse files Browse the repository at this point in the history
  • Loading branch information
PoolloverNathan committed Apr 4, 2024
1 parent e253f3e commit 2f67f50
Showing 1 changed file with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,32 @@ public FiguraFuture<LuaValue> map(LuaFunction mapper) {
return map(wrapLua(mapper));
}

public <R> FiguraFuture<R> andThen(Function<T, FiguraFuture<R>> f) {
final var fut = new FiguraFuture<R>(avatar);
onFinishError(fut::error);
onFinish(v -> {
final var r = f.apply(v);
r.onFinish(fut::complete);
r.onFinishError(fut::error);
});
return fut;
}
@LuaWhitelist
public FiguraFuture<LuaValue> andThen(LuaFunction f) {
return andThen(v -> {
final var res = f.invoke().arg1();
if (res.isuserdata(FiguraFuture.class)) {
return (FiguraFuture<LuaValue>) res.checkuserdata(FiguraFuture.class);
} else {
// do not rely on this behavior
// FIXME: will be optimized sometime soon - I wrote this at 1:08 AM
final var fut = new FiguraFuture<LuaValue>(avatar);
fut.complete(res);
return fut;
}
});
}

public <R> Function<R, LuaValue> wrapLua(LuaFunction f) {
return a -> f.invoke(avatar.luaRuntime.typeManager.javaToLua(a)).arg1();
}
Expand Down

0 comments on commit 2f67f50

Please sign in to comment.