RequestMatcher.java

package sprout.security.web.util.matcher;

import sprout.mvc.http.HttpRequest;

import java.util.Collections;
import java.util.Map;

public interface RequestMatcher {
    boolean matches(HttpRequest request);

    default MatchResult matcher(HttpRequest request) {
        boolean match = matches(request);
        return new MatchResult(match, Collections.emptyMap());
    }

    class MatchResult {

        private final boolean match;

        private final Map<String, String> variables;

        MatchResult(boolean match, Map<String, String> variables) {
            this.match = match;
            this.variables = variables;
        }

        public boolean isMatch() {
            return this.match;
        }

        public Map<String, String> getVariables() {
            return this.variables;
        }

        public static MatchResult match() {
            return new MatchResult(true, Collections.emptyMap());
        }

        public static MatchResult match(Map<String, String> variables) {
            return new MatchResult(true, variables);
        }

        public static MatchResult notMatch() {
            return new MatchResult(false, Collections.emptyMap());
        }

    }
}