Skip to content

Commit c6297f4

Browse files
committed
support off-task ValueProvider
1 parent ddb6295 commit c6297f4

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

value/core/src/main/java/me/hsgamer/topper/value/core/ValueProvider.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,62 @@
33
import org.jetbrains.annotations.NotNull;
44
import org.jetbrains.annotations.Nullable;
55

6+
import java.util.function.BiConsumer;
7+
import java.util.function.Consumer;
68
import java.util.function.Function;
79

8-
public interface ValueProvider<K, V> extends Function<K, ValueWrapper<V>> {
10+
public interface ValueProvider<K, V> extends BiConsumer<K, Consumer<ValueWrapper<V>>> {
911
static <K, V> ValueProvider<K, V> empty() {
10-
return k -> ValueWrapper.notHandled();
12+
return (k, callback) -> callback.accept(ValueWrapper.notHandled());
1113
}
1214

1315
static <K, V> ValueProvider<K, V> simple(Function<@NotNull K, @Nullable V> function) {
14-
return k -> {
16+
return (k, callback) -> {
1517
try {
16-
return ValueWrapper.handled(function.apply(k));
18+
callback.accept(ValueWrapper.handled(function.apply(k)));
1719
} catch (Throwable e) {
18-
return ValueWrapper.error("An error occurred while getting the value", e);
20+
callback.accept(ValueWrapper.error("An error occurred while getting the value", e));
1921
}
2022
};
2123
}
2224

2325
static <K, V> ValueProvider<K, V> error(@NotNull String errorMessage) {
24-
return k -> ValueWrapper.error(errorMessage);
26+
return (k, callback) -> callback.accept(ValueWrapper.error(errorMessage));
2527
}
2628

2729
@Override
28-
@NotNull ValueWrapper<V> apply(@NotNull K key);
30+
void accept(K k, Consumer<ValueWrapper<V>> callback);
2931

3032
default <RK> ValueProvider<RK, V> beforeApply(Function<@NotNull RK, @Nullable K> mapper) {
31-
return rawKey -> {
33+
return (rawKey, callback) -> {
3234
try {
3335
K key = mapper.apply(rawKey);
3436
if (key == null) {
35-
return ValueWrapper.notHandled();
37+
callback.accept(ValueWrapper.notHandled());
38+
return;
3639
}
37-
return apply(key);
40+
accept(key, callback);
3841
} catch (Throwable e) {
39-
return ValueWrapper.error("An error occurred while mapping the key", e);
42+
callback.accept(ValueWrapper.error("An error occurred while mapping the key", e));
4043
}
4144
};
4245
}
4346

4447
default <F> ValueProvider<K, F> thenApply(Function<@NotNull V, @Nullable F> mapper) {
45-
return key -> {
46-
ValueWrapper<V> wrapper = apply(key);
48+
return (key, callback) -> accept(key, wrapper -> {
4749
if (!wrapper.isHandled()) {
48-
return ValueWrapper.copyNullWrapper(wrapper);
50+
callback.accept(ValueWrapper.copyNullWrapper(wrapper));
51+
return;
4952
}
5053
if (wrapper.value == null) {
51-
return ValueWrapper.error("The raw value is null");
54+
callback.accept(ValueWrapper.error("The raw value is null"));
55+
return;
5256
}
5357
try {
54-
return ValueWrapper.handled(mapper.apply(wrapper.value));
58+
callback.accept(ValueWrapper.handled(mapper.apply(wrapper.value)));
5559
} catch (Throwable e) {
56-
return ValueWrapper.error("An error occurred while converting the raw value", e);
60+
callback.accept(ValueWrapper.error("An error occurred while converting the raw value", e));
5761
}
58-
};
62+
});
5963
}
6064
}

0 commit comments

Comments
 (0)