// Path: src/main/java/co/omise/models/OmiseObjectBase.java
// public abstract class OmiseObjectBase implements OmiseObject, Serializable {
// 
//     private String object;
//     private String location;
// 
//     public OmiseObjectBase() {
//     }
// 
//     @Override
//     public String getObject() {
//         return object;
//     }
// 
//     @Override
//     public void setObject(String object) {
//         this.object = object;
//     }
// 
//     @Override
//     public String getLocation() {
//         return location;
//     }
// 
//     @Override
//     public void setLocation(String location) {
//         this.location = location;
//     }
// }
// 
// Path: src/main/java/co/omise/models/Params.java
// public abstract class Params {
//     private static final MediaType JSON_MEDIA_TYPE = MediaType.parse("application/json; charset=utf-8");
// 
//     /**
//      * Returns a map of query string key values to add to an HTTP operation's URL.
//      *
//      * @param serializer The {@link Serializer} to use to serialize parameter data.
//      *                   Or `null` to use the default serializer.
//      * @return An {@link Map} containing keys and values to adds to the URL.
//      */
//     public Map<String, String> query(Serializer serializer) {
//         return Collections.unmodifiableMap(new HashMap<String, String>());
//     }
// 
//     /**
//      * Returns the {@link RequestBody} to send with the HTTP request. The default implementation serializes
//      * the instance into JSON format and builds an HTTP {@link RequestBody} containing the serialized data.
//      *
//      * @param serializer The {@link Serializer} to use to serialize parameter data.
//      *                   Or `null` to use the default serializer.
//      * @return An {@link RequestBody} to send with the HTTP request.
//      * @throws IOException on serialization errors.
//      */
//     public RequestBody body(Serializer serializer) throws IOException {
//         if (serializer == null) {
//             serializer = Serializer.defaultSerializer();
//         }
// 
//         ByteArrayOutputStream stream = new ByteArrayOutputStream(4096);
//         serializer.serializeParams(stream, this);
//         return RequestBody.create(JSON_MEDIA_TYPE, stream.toByteArray());
//     }
// }


import co.omise.models.OmiseObjectBase;
import co.omise.models.Params;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.collect.Maps;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Map;

        assertEquals("/404", dummy.getLocation());
        assertEquals("dummy", dummy.getObject());
        assertEquals("world", dummy.getHello());

    }


    private Serializer serializer() {
        return Serializer.defaultSerializer();
    }

    public static final class Dummy extends OmiseObjectBase {
        private String hello;

        public Dummy() {
            setLocation("/404");
            setObject("dummy");
            setHello("world");
        }

        public String getHello() {
            return hello;
        }

        public void setHello(String hello) {
            this.hello = hello;
        }
    }

// Path: src/main/java/co/omise/models/OmiseObjectBase.java
// public abstract class OmiseObjectBase implements OmiseObject, Serializable {
// 
//     private String object;
//     private String location;
// 
//     public OmiseObjectBase() {
//     }
// 
//     @Override
//     public String getObject() {
//         return object;
//     }
// 
//     @Override
//     public void setObject(String object) {
//         this.object = object;
//     }
// 
//     @Override
//     public String getLocation() {
//         return location;
//     }
// 
//     @Override
//     public void setLocation(String location) {
//         this.location = location;
//     }
// }
// 
// Path: src/main/java/co/omise/models/Params.java
// public abstract class Params {
//     private static final MediaType JSON_MEDIA_TYPE = MediaType.parse("application/json; charset=utf-8");
// 
//     /**
//      * Returns a map of query string key values to add to an HTTP operation's URL.
//      *
//      * @param serializer The {@link Serializer} to use to serialize parameter data.
//      *                   Or `null` to use the default serializer.
//      * @return An {@link Map} containing keys and values to adds to the URL.
//      */
//     public Map<String, String> query(Serializer serializer) {
//         return Collections.unmodifiableMap(new HashMap<String, String>());
//     }
// 
//     /**
//      * Returns the {@link RequestBody} to send with the HTTP request. The default implementation serializes
//      * the instance into JSON format and builds an HTTP {@link RequestBody} containing the serialized data.
//      *
//      * @param serializer The {@link Serializer} to use to serialize parameter data.
//      *                   Or `null` to use the default serializer.
//      * @return An {@link RequestBody} to send with the HTTP request.
//      * @throws IOException on serialization errors.
//      */
//     public RequestBody body(Serializer serializer) throws IOException {
//         if (serializer == null) {
//             serializer = Serializer.defaultSerializer();
//         }
// 
//         ByteArrayOutputStream stream = new ByteArrayOutputStream(4096);
//         serializer.serializeParams(stream, this);
//         return RequestBody.create(JSON_MEDIA_TYPE, stream.toByteArray());
//     }
// }


// Path: src/test/java/co/omise/SerializerTest.java
import co.omise.models.OmiseObjectBase;
import co.omise.models.Params;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.collect.Maps;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Map;


        assertEquals("/404", dummy.getLocation());
        assertEquals("dummy", dummy.getObject());
        assertEquals("world", dummy.getHello());

    }


    private Serializer serializer() {
        return Serializer.defaultSerializer();
    }

    public static final class Dummy extends OmiseObjectBase {
        private String hello;

        public Dummy() {
            setLocation("/404");
            setObject("dummy");
            setHello("world");
        }

        public String getHello() {
            return hello;
        }

        public void setHello(String hello) {
            this.hello = hello;
        }
    }

    public static final class DummyParams extends Params {