![JAR search and dependency download from the Maven repository](/logo.png)
com.aol.cyclops.vavr.adapter.FutureAdapter Maven / Gradle / Ivy
package com.aol.cyclops.vavr.adapter;
import com.aol.cyclops2.types.anyM.AnyMValue;
import com.aol.cyclops2.types.extensability.ValueAdapter;
import cyclops.conversion.vavr.FromCyclopsReact;
import cyclops.conversion.vavr.ToCyclopsReact;
import cyclops.monads.Vavr;
import cyclops.monads.VavrWitness;
import cyclops.monads.VavrWitness.future;
import com.aol.cyclops2.types.extensability.AbstractFunctionalAdapter;
import cyclops.control.Maybe;
import cyclops.monads.AnyM;
import io.vavr.concurrent.Future;
import io.vavr.concurrent.Promise;
import lombok.AllArgsConstructor;
import java.util.function.Function;
import java.util.function.Predicate;
@AllArgsConstructor
public class FutureAdapter implements ValueAdapter {
public T get(AnyMValue t){
return future(t).get();
}
@Override
public Iterable toIterable(AnyM t) {
return Maybe.fromIterable(t.unwrap());
}
@Override
public AnyM ap(AnyM> fn, AnyM apply) {
Future f = future(apply);
Future extends Function super T, ? extends R>> fnF = future(fn);
Future res = FromCyclopsReact.future(ToCyclopsReact.future(fnF).combine(ToCyclopsReact.future(f), (a, b) -> a.apply(b)));
return Vavr.future(res);
}
@Override
public AnyM filter(AnyM t, Predicate super T> fn) {
return Vavr.future(future(t).filter(fn));
}
Future future(AnyM anyM){
return anyM.unwrap();
}
@Override
public AnyM empty() {
return Vavr.future(Promise.make().future());
}
@Override
public AnyM flatMap(AnyM t,
Function super T, ? extends AnyM> fn) {
return Vavr.future(future(t).flatMap(fn.andThen(a-> future(a))));
}
@Override
public AnyM unitIterable(Iterable it) {
return Vavr.future(FromCyclopsReact.future(Maybe.fromIterable(it)));
}
@Override
public AnyM unit(T o) {
return Vavr.future(Future.successful(o));
}
@Override
public AnyM map(AnyM t, Function super T, ? extends R> fn) {
return Vavr.future(future(t).map(fn));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy