// Path: json-unit-core/src/main/java/net/javacrumbs/jsonunit/core/internal/PathOption.java
// public class PathOption {
//     private final List<String> paths;
//     private final Set<Option> options;
// 
//     /**
//      * True if this option is included, false if excluded.
//      */
//     private final boolean included;
// 
//     public PathOption(List<String> paths, Set<Option> options, boolean included) {
//         this.paths = Collections.unmodifiableList(paths);
//         this.options = Collections.unmodifiableSet(EnumSet.copyOf(options));
//         this.included = included;
//     }
// 
//     public List<String> getPaths() {
//         return paths;
//     }
// 
//     public Set<Option> getOptions() {
//         return options;
//     }
// 
//     boolean isIncluded() {
//         return included;
//     }
// 
//     public PathOption withPaths(List<String> newPoPaths) {
//         return new PathOption(newPoPaths, options, included);
//     }
// }


import net.javacrumbs.jsonunit.core.internal.PathOption;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
        private PathsParam(String... paths) {
            this.paths = Arrays.asList(paths);
        }

        List<String> getPaths() {
            return paths;
        }

        Configuration apply(Configuration configuration, ApplicableForPath action) {
            return action.applyForPaths(configuration, this);
        }
    }

    public interface ApplicableForPath {
        @NotNull
        Configuration applyForPaths(@NotNull Configuration configuration, @NotNull PathsParam pathsParam);
    }

    static class OptionsParam implements ApplicableForPath {
        private final EnumSet<Option> options;
        private final boolean included;

        private OptionsParam(boolean included, Option first, Option... next) {
            this.options = EnumSet.of(first, next);
            this.included = included;
        }

        @Override
        @NotNull
        public Configuration applyForPaths(@NotNull Configuration configuration, @NotNull PathsParam pathsParam) {
// Path: json-unit-core/src/main/java/net/javacrumbs/jsonunit/core/internal/PathOption.java
// public class PathOption {
//     private final List<String> paths;
//     private final Set<Option> options;
// 
//     /**
//      * True if this option is included, false if excluded.
//      */
//     private final boolean included;
// 
//     public PathOption(List<String> paths, Set<Option> options, boolean included) {
//         this.paths = Collections.unmodifiableList(paths);
//         this.options = Collections.unmodifiableSet(EnumSet.copyOf(options));
//         this.included = included;
//     }
// 
//     public List<String> getPaths() {
//         return paths;
//     }
// 
//     public Set<Option> getOptions() {
//         return options;
//     }
// 
//     boolean isIncluded() {
//         return included;
//     }
// 
//     public PathOption withPaths(List<String> newPoPaths) {
//         return new PathOption(newPoPaths, options, included);
//     }
// }


// Path: json-unit-core/src/main/java/net/javacrumbs/jsonunit/core/ConfigurationWhen.java
import net.javacrumbs.jsonunit.core.internal.PathOption;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

        private PathsParam(String... paths) {
            this.paths = Arrays.asList(paths);
        }

        List<String> getPaths() {
            return paths;
        }

        Configuration apply(Configuration configuration, ApplicableForPath action) {
            return action.applyForPaths(configuration, this);
        }
    }

    public interface ApplicableForPath {
        @NotNull
        Configuration applyForPaths(@NotNull Configuration configuration, @NotNull PathsParam pathsParam);
    }

    static class OptionsParam implements ApplicableForPath {
        private final EnumSet<Option> options;
        private final boolean included;

        private OptionsParam(boolean included, Option first, Option... next) {
            this.options = EnumSet.of(first, next);
            this.included = included;
        }

        @Override
        @NotNull
        public Configuration applyForPaths(@NotNull Configuration configuration, @NotNull PathsParam pathsParam) {
            return configuration.addPathOption(new PathOption(pathsParam.getPaths(), options, included));