/** * Construct an Ior that contains a single value extracted from the supplied reactive-streams Publisher * <pre> * {@code * ReactiveSeq<Integer> stream = ReactiveSeq.of(1,2,3); Ior<Throwable,Integer> future = Ior.fromPublisher(stream); //Ior[1] * * } * </pre> * * @param pub Publisher to extract value from * @return Ior populated from Publisher */ public static <T> Ior<Throwable, T> fromPublisher(final Publisher<T> pub) { final ValueSubscriber<T> sub = ValueSubscriber.subscriber(); pub.subscribe(sub); return sub.toEither() .toIor(); }
@Override public LazyEither<Throwable,T> findFirstOrError(){ return LazyEither.fromLazy(Eval.later(()->{ ValueSubscriber<T> valueSubscriber = ValueSubscriber.subscriber(); subscribe(valueSubscriber); return LazyEither.fromEither(valueSubscriber.toEither()); })); }
@Test public void xorPublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.right(1) .subscribe(sub); Either<Throwable,Integer> maybe = sub.toEither(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void xorPublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.right(1) .subscribe(sub); Either<Throwable,Integer> maybe = sub.toEither(); assertThat(maybe.toOptional().get(),equalTo(1)); } @Test
@Test public void xorSecondaryPublisherErrorTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.<Integer,Integer>left(1) .subscribe(sub); Either<Integer,Throwable> xor = sub.toEither().swap(); assertThat(xor.orElse(null),instanceOf(NoSuchElementException.class)); } @Test
@Test public void xorPublisherErrorTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.<Integer,Integer>left(1) .subscribe(sub); Either<Throwable,Integer> xor = sub.toEither(); assertThat(xor.swap().orElse(null),instanceOf(NoSuchElementException.class)); } @Test
@Test public void xorSecondaryPublisherErrorTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.<Integer,Integer>left(1) .subscribe(sub); Either<Integer,Throwable> xor = sub.toEither().swap(); assertThat(xor.orElse(null),instanceOf(NoSuchElementException.class)); } @Test
@Test public void xorPublisherErrorTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.<Integer,Integer>left(1) .subscribe(sub); Either<Throwable,Integer> xor = sub.toEither(); assertThat(xor.swap().orElse(null),instanceOf(NoSuchElementException.class)); } @Test
@Test public void xorSecondryPublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.right(1) .subscribe(sub); Either<Integer,Throwable> maybe = sub.toEither().swap(); assertThat(maybe.swap().orElse(null),equalTo(1)); } @Test
@Test public void xorSecondryPublisherTest(){ ValueSubscriber<Integer> sub = ValueSubscriber.subscriber(); Either.right(1) .subscribe(sub); Either<Integer,Throwable> maybe = sub.toEither().swap(); assertThat(maybe.swap().orElse(null),equalTo(1)); } @Test
/** * Construct an Ior that contains a single value extracted from the supplied reactive-streams Publisher * <pre> * {@code * ReactiveSeq<Integer> stream = ReactiveSeq.of(1,2,3); Ior<Throwable,Integer> future = Ior.fromPublisher(stream); //Ior[1] * * } * </pre> * * @param pub Publisher to extract value from * @return Ior populated from Publisher */ public static <T> Ior<Throwable, T> fromPublisher(final Publisher<T> pub) { final ValueSubscriber<T> sub = ValueSubscriber.subscriber(); pub.subscribe(sub); return sub.toEither() .toIor(); }
@Override public LazyEither<Throwable,T> findFirstOrError(){ return LazyEither.fromLazy(Eval.later(()->{ ValueSubscriber<T> valueSubscriber = ValueSubscriber.subscriber(); subscribe(valueSubscriber); return LazyEither.fromEither(valueSubscriber.toEither()); })); }
/** * Extact one value from the selected pipe or an error if it doesn't exist (NoSuchElementException). * * <pre> * {@code * * Queue<String> q = new Queue<>(); pipes.register("hello", q); pipes.push("hello", "world"); pipes.push("hello", "world2"); pipes.oneOrError("hello") .getValue() //"world" * } * </pre> * @param key : Adapter identifier * @return Xor containing lazy a NoSuchElementException an Adapter with the specified key does not exist, * or the next value from that Adapter */ public Either<Throwable, V> oneOrError(final K key) { final ValueSubscriber<V> sub = ValueSubscriber.subscriber(); return get(key).peek(a -> a.stream() .subscribe(sub)) .map(a -> sub.toEither()) .orElse(Either.left(new NoSuchElementException( "no adapter for key " + key))); }