package com.googlecode.totallylazy.transducers;
import com.googlecode.totallylazy.Option;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.googlecode.totallylazy.transducers.State.Stop;
public interface FirstOptionTransducer<T> extends Transducer<T, Option<T>> {
static <T> FirstOptionTransducer<T> firstOptionTransducer() {
AtomicBoolean complete = new AtomicBoolean(false);
return receiver -> Receiver.receiver(receiver, item -> {
receiver.next(Option.some(item));
receiver.finish();
complete.set(true);
return Stop;
}, () -> {
if(!complete.get()) {
receiver.next(Option.none());
receiver.finish();
}
});
}
}