// Path: library/src/main/java/org/mariotaku/restfu/http/MultiValueMap.java
// public final class MultiValueMap<V> extends MultiMap<String, V> {
// 
//     public MultiValueMap() {
//         this(new HashMap<String, List<V>>(), false);
//     }
// 
//     public MultiValueMap(Map<String, List<V>> map) {
//         this(map, false);
//     }
// 
//     public MultiValueMap(boolean ignoreCase) {
//         this(null, ignoreCase);
//     }
// 
//     public MultiValueMap(Map<String, List<V>> map, boolean ignoreCase) {
//         super(map, new StringEquatable(ignoreCase));
//     }
// 
//     private static class StringEquatable implements Equatable<String> {
//         private boolean ignoreCase;
// 
//         StringEquatable(boolean ignoreCase) {
//             this.ignoreCase = ignoreCase;
//         }
// 
//         @Override
//         public boolean equals(String s1, String s2) {
//             if (s1 == null || s2 == null) {
//                 //noinspection StringEquality
//                 return s1 == s2;
//             }
//             if (ignoreCase) {
//                 return s1.equalsIgnoreCase(s2);
//             }
//             return s1.equals(s2);
//         }
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/RawValue.java
// public final class RawValue {
//     private final Raw annotation;
//     private final Object value;
// 
//     @Override
//     public String toString() {
//         return "FileValue{" +
//                 "annotation=" + annotation +
//                 ", value=" + value +
//                 '}';
//     }
// 
//     public RawValue(Raw annotation, Object value) {
//         this.annotation = annotation;
//         this.value = value;
//     }
// 
//     public <E extends Exception> Body body(RestConverter.Factory<E> converterFactory) throws E, IOException,
//             RestConverter.ConvertException {
//         if (value == null) return null;
//         //noinspection unchecked
//         final RestConverter<Object, Body, E> converter =
//                 (RestConverter<Object, Body, E>) converterFactory.forRequest(value.getClass());
//         if (converter != null) return converter.convert(value);
//         return SimpleBody.wrap(value);
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/ValueMap.java
// public interface ValueMap {
// 
//     boolean has(@NotNull String key);
// 
//     @Nullable
//     Object get(@NotNull String key);
// 
//     @NotNull
//     String[] keys();
// 
// }


import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mariotaku.commons.collection.Pair;
import org.mariotaku.restfu.http.BodyType;
import org.mariotaku.restfu.http.MultiValueMap;
import org.mariotaku.restfu.http.RawValue;
import org.mariotaku.restfu.http.ValueMap;
import org.mariotaku.restfu.http.mime.*;
import java.io.IOException;
import java.util.Map;
/*
 * Copyright (c) 2015 mariotaku
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.mariotaku.restfu;




@SuppressWarnings("WeakerAccess")
public final class RestRequest {

    @NotNull
    private final String method;
    private final boolean hasBody;
    @NotNull
    private final String path;

    @Nullable
// Path: library/src/main/java/org/mariotaku/restfu/http/MultiValueMap.java
// public final class MultiValueMap<V> extends MultiMap<String, V> {
// 
//     public MultiValueMap() {
//         this(new HashMap<String, List<V>>(), false);
//     }
// 
//     public MultiValueMap(Map<String, List<V>> map) {
//         this(map, false);
//     }
// 
//     public MultiValueMap(boolean ignoreCase) {
//         this(null, ignoreCase);
//     }
// 
//     public MultiValueMap(Map<String, List<V>> map, boolean ignoreCase) {
//         super(map, new StringEquatable(ignoreCase));
//     }
// 
//     private static class StringEquatable implements Equatable<String> {
//         private boolean ignoreCase;
// 
//         StringEquatable(boolean ignoreCase) {
//             this.ignoreCase = ignoreCase;
//         }
// 
//         @Override
//         public boolean equals(String s1, String s2) {
//             if (s1 == null || s2 == null) {
//                 //noinspection StringEquality
//                 return s1 == s2;
//             }
//             if (ignoreCase) {
//                 return s1.equalsIgnoreCase(s2);
//             }
//             return s1.equals(s2);
//         }
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/RawValue.java
// public final class RawValue {
//     private final Raw annotation;
//     private final Object value;
// 
//     @Override
//     public String toString() {
//         return "FileValue{" +
//                 "annotation=" + annotation +
//                 ", value=" + value +
//                 '}';
//     }
// 
//     public RawValue(Raw annotation, Object value) {
//         this.annotation = annotation;
//         this.value = value;
//     }
// 
//     public <E extends Exception> Body body(RestConverter.Factory<E> converterFactory) throws E, IOException,
//             RestConverter.ConvertException {
//         if (value == null) return null;
//         //noinspection unchecked
//         final RestConverter<Object, Body, E> converter =
//                 (RestConverter<Object, Body, E>) converterFactory.forRequest(value.getClass());
//         if (converter != null) return converter.convert(value);
//         return SimpleBody.wrap(value);
//     }
// }
// 
// Path: library/src/main/java/org/mariotaku/restfu/http/ValueMap.java
// public interface ValueMap {
// 
//     boolean has(@NotNull String key);
// 
//     @Nullable
//     Object get(@NotNull String key);
// 
//     @NotNull
//     String[] keys();
// 
// }


// Path: library/src/main/java/org/mariotaku/restfu/RestRequest.java
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mariotaku.commons.collection.Pair;
import org.mariotaku.restfu.http.BodyType;
import org.mariotaku.restfu.http.MultiValueMap;
import org.mariotaku.restfu.http.RawValue;
import org.mariotaku.restfu.http.ValueMap;
import org.mariotaku.restfu.http.mime.*;
import java.io.IOException;
import java.util.Map;

/*
 * Copyright (c) 2015 mariotaku
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.mariotaku.restfu;




@SuppressWarnings("WeakerAccess")
public final class RestRequest {

    @NotNull
    private final String method;
    private final boolean hasBody;
    @NotNull
    private final String path;

    @Nullable
    private final MultiValueMap<String> headers;