// Path: src/main/java/io/smartcat/ranger/core/ConstantValue.java
// public class ConstantValue<T> extends Value<T> {
// 
//     /**
//      * Constructs constant value which will always return specified <code>value</code>.
//      *
//      * @param value Value to be returned.
//      */
//     public ConstantValue(T value) {
//         this.val = value;
//     }
// 
//     /**
//      * Helper method to construct {@link ConstantValue}.
//      *
//      * @param value Value to be returned by created constant value.
//      * @param <T> Type this value would evaluate to.
//      *
//      * @return An instance of {@link ConstantValue}.
//      */
//     public static <T> ConstantValue<T> of(T value) {
//         return new ConstantValue<T>(value);
//     }
// }


import java.util.LinkedHashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.smartcat.ranger.core.CompositeValue;
import io.smartcat.ranger.core.ConstantValue;
import io.smartcat.ranger.core.TypeConverterValue;
import io.smartcat.ranger.core.Value;
package io.smartcat.ranger;




/**
 * Builder for {@link ObjectGenerator}.
 */
public class ObjectGeneratorBuilder {

    private final Map<String, Value<?>> propertyValues;

    /**
     * Constructs {@link ObjectGeneratorBuilder}.
     */
    public ObjectGeneratorBuilder() {
        this.propertyValues = new LinkedHashMap<>();
    }

    /**
     * Sets the value to be used for generating values for property.
     *
     * @param property Name of the property.
     * @param value Value to be used for generating values.
     * @param <V> Type of object which value will be generate.
     * @return This builder.
     */
    @SuppressWarnings({ "rawtypes" })
    public <V> ObjectGeneratorBuilder prop(String property, V value) {
        propertyValues.put(property,
                value instanceof ObjectGenerator ? ((ObjectGenerator) value).value : ConstantValue.of(value));
// Path: src/main/java/io/smartcat/ranger/core/ConstantValue.java
// public class ConstantValue<T> extends Value<T> {
// 
//     /**
//      * Constructs constant value which will always return specified <code>value</code>.
//      *
//      * @param value Value to be returned.
//      */
//     public ConstantValue(T value) {
//         this.val = value;
//     }
// 
//     /**
//      * Helper method to construct {@link ConstantValue}.
//      *
//      * @param value Value to be returned by created constant value.
//      * @param <T> Type this value would evaluate to.
//      *
//      * @return An instance of {@link ConstantValue}.
//      */
//     public static <T> ConstantValue<T> of(T value) {
//         return new ConstantValue<T>(value);
//     }
// }


// Path: src/main/java/io/smartcat/ranger/ObjectGeneratorBuilder.java
import java.util.LinkedHashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.smartcat.ranger.core.CompositeValue;
import io.smartcat.ranger.core.ConstantValue;
import io.smartcat.ranger.core.TypeConverterValue;
import io.smartcat.ranger.core.Value;

package io.smartcat.ranger;




/**
 * Builder for {@link ObjectGenerator}.
 */
public class ObjectGeneratorBuilder {

    private final Map<String, Value<?>> propertyValues;

    /**
     * Constructs {@link ObjectGeneratorBuilder}.
     */
    public ObjectGeneratorBuilder() {
        this.propertyValues = new LinkedHashMap<>();
    }

    /**
     * Sets the value to be used for generating values for property.
     *
     * @param property Name of the property.
     * @param value Value to be used for generating values.
     * @param <V> Type of object which value will be generate.
     * @return This builder.
     */
    @SuppressWarnings({ "rawtypes" })
    public <V> ObjectGeneratorBuilder prop(String property, V value) {
        propertyValues.put(property,
                value instanceof ObjectGenerator ? ((ObjectGenerator) value).value : ConstantValue.of(value));
        return this;