All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jsonvalues.supplier.JsArraySupplier Maven / Gradle / Ivy

package jsonvalues.supplier;

import io.vavr.collection.Vector;
import jsonvalues.JsArray;
import jsonvalues.JsValue;
import java.util.function.Supplier;
import static java.util.Objects.requireNonNull;

/**
 Represents a Json array of suppliers that combines every supplier
 and produces as a result a Json array
 */
public class JsArraySupplier implements java.util.function.Supplier {
    private Vector> array = Vector.empty();

    @Override
    public JsArray get() {
        JsArray result = JsArray.empty();
        for (Supplier supplier : array) {
            result = result.append(supplier.get());
        }

        return result;
    }


    private JsArraySupplier() {
    }

    @SafeVarargs
    private JsArraySupplier(final Supplier fut,
                            final Supplier... others
                           ) {
        array = array.append(fut);
        for (final Supplier other : others) {
            array = array.append(other);
        }
    }

    /**
     returns a JsArraySupplier from the given head and the tail
     @param head the head
     @param tail the tail
     @return a new JsArraySupplier
     */
    @SafeVarargs
    public static JsArraySupplier tuple(final Supplier head,
                                        final Supplier... tail
                                       ) {
        return new JsArraySupplier(requireNonNull(head),
                                   requireNonNull(tail)
        );
    }

    /**
     returns a JsArraySupplier that returns an empty Json array
     @return a JsArraySupplier
     */
    public static JsArraySupplier empty() {
        return new JsArraySupplier();
    }


    public JsArraySupplier append(final Supplier future) {
        final JsArraySupplier arraySupplier = new JsArraySupplier();
        arraySupplier.array = this.array.append(future);
        return arraySupplier;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy