// Path: core/src/main/java/io/appflate/restmock/logging/NOOpLogger.java
// public class NOOpLogger implements RESTMockLogger {
// 
//     @Override
//     public void log(String message) {
//         //intentionally empty
//     }
// 
//     @Override
//     public void error(String errorMessage) {
//         //intentionally empty
//     }
// 
//     @Override
//     public void error(String errorMessage, Throwable exception) {
//         //intentionally empty
//     }
// }
// 
// Path: core/src/main/java/io/appflate/restmock/logging/RESTMockLogger.java
// public interface RESTMockLogger {
// 
//     void log(String message);
// 
//     void error(String errorMessage);
// 
//     void error(String errorMessage, Throwable exception);
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isDELETE() {
//     return httpMethodIs("DELETE");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isGET() {
//     return httpMethodIs("GET");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isHEAD() {
//     return httpMethodIs("HEAD");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPATCH() {
//     return httpMethodIs("PATCH");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPOST() {
//     return httpMethodIs("POST");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPUT() {
//     return httpMethodIs("PUT");
// }


import static io.appflate.restmock.utils.RequestMatchers.isPUT;
import static org.hamcrest.core.AllOf.allOf;
import io.appflate.restmock.logging.NOOpLogger;
import io.appflate.restmock.logging.RESTMockLogger;
import java.io.IOException;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.hamcrest.Matcher;
import static io.appflate.restmock.utils.RequestMatchers.isDELETE;
import static io.appflate.restmock.utils.RequestMatchers.isGET;
import static io.appflate.restmock.utils.RequestMatchers.isHEAD;
import static io.appflate.restmock.utils.RequestMatchers.isPATCH;
import static io.appflate.restmock.utils.RequestMatchers.isPOST;
     * @param replacement {@code MatchableCall} to be added to {@code RESTMockServer}
     */
    public static void replaceMatchableCall(MatchableCall call, MatchableCall replacement) {
        removeMatchableCall(call);
        dispatcher.addMatchableCall(replacement);
    }

    /**
     * @return this {@code RESTMockServer} url to use as an endpoint in your tests, or null, if the instance wasn't started yet
     */
    public static String getUrl() {
        return serverBaseUrl;
    }

    /**
     * adds {@code call} to this {@code RESTMockServer}
     *
     * @param call to be added to this {@code RESTMockServer}
     */
    public static void addMatchableCall(final MatchableCall call) {
        dispatcher.addMatchableCall(call);
    }

    /**
     * Helper method to create MatchableCall that will be matched only for GET requests along with the specified {@code requestMatcher}
     *
     * @param requestMatcher matcher to match a GET request
     * @return {@code MatchableCall} that will match GET requests along with {@code requestMatcher}
     */
    public static MatchableCall whenGET(Matcher<RecordedRequest> requestMatcher) {
// Path: core/src/main/java/io/appflate/restmock/logging/NOOpLogger.java
// public class NOOpLogger implements RESTMockLogger {
// 
//     @Override
//     public void log(String message) {
//         //intentionally empty
//     }
// 
//     @Override
//     public void error(String errorMessage) {
//         //intentionally empty
//     }
// 
//     @Override
//     public void error(String errorMessage, Throwable exception) {
//         //intentionally empty
//     }
// }
// 
// Path: core/src/main/java/io/appflate/restmock/logging/RESTMockLogger.java
// public interface RESTMockLogger {
// 
//     void log(String message);
// 
//     void error(String errorMessage);
// 
//     void error(String errorMessage, Throwable exception);
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isDELETE() {
//     return httpMethodIs("DELETE");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isGET() {
//     return httpMethodIs("GET");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isHEAD() {
//     return httpMethodIs("HEAD");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPATCH() {
//     return httpMethodIs("PATCH");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPOST() {
//     return httpMethodIs("POST");
// }
// 
// Path: core/src/main/java/io/appflate/restmock/utils/RequestMatchers.java
// public static RequestMatcher isPUT() {
//     return httpMethodIs("PUT");
// }


// Path: core/src/main/java/io/appflate/restmock/RESTMockServer.java
import static io.appflate.restmock.utils.RequestMatchers.isPUT;
import static org.hamcrest.core.AllOf.allOf;
import io.appflate.restmock.logging.NOOpLogger;
import io.appflate.restmock.logging.RESTMockLogger;
import java.io.IOException;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.hamcrest.Matcher;
import static io.appflate.restmock.utils.RequestMatchers.isDELETE;
import static io.appflate.restmock.utils.RequestMatchers.isGET;
import static io.appflate.restmock.utils.RequestMatchers.isHEAD;
import static io.appflate.restmock.utils.RequestMatchers.isPATCH;
import static io.appflate.restmock.utils.RequestMatchers.isPOST;

     * @param replacement {@code MatchableCall} to be added to {@code RESTMockServer}
     */
    public static void replaceMatchableCall(MatchableCall call, MatchableCall replacement) {
        removeMatchableCall(call);
        dispatcher.addMatchableCall(replacement);
    }

    /**
     * @return this {@code RESTMockServer} url to use as an endpoint in your tests, or null, if the instance wasn't started yet
     */
    public static String getUrl() {
        return serverBaseUrl;
    }

    /**
     * adds {@code call} to this {@code RESTMockServer}
     *
     * @param call to be added to this {@code RESTMockServer}
     */
    public static void addMatchableCall(final MatchableCall call) {
        dispatcher.addMatchableCall(call);
    }

    /**
     * Helper method to create MatchableCall that will be matched only for GET requests along with the specified {@code requestMatcher}
     *
     * @param requestMatcher matcher to match a GET request
     * @return {@code MatchableCall} that will match GET requests along with {@code requestMatcher}
     */
    public static MatchableCall whenGET(Matcher<RecordedRequest> requestMatcher) {
        return RESTMockServer.whenRequested(allOf(isGET(), requestMatcher));