// Path: jaxrs-doclet/src/main/java/com/hypnoticocelot/jaxrs/doclet/model/ApiDeclaration.java
// @JsonPropertyOrder({"apiVersion", "swaggerVersion", "basePath", "resourcePath", "apis", "models"})
// public class ApiDeclaration {
//     private String apiVersion;
//     private String swaggerVersion;
//     private String basePath;
//     private String resourcePath;
//     private Collection<Api> apis;
//     private Map<String, Model> models;
// 
//     @SuppressWarnings("unused")
//     private ApiDeclaration() {
//     }
// 
//     public ApiDeclaration(String apiVersion, String basePath, String resourcePath, Collection<Api> apis, Map<String, Model> models) {
//         this.apiVersion = apiVersion;
//         this.swaggerVersion = "1.1";
//         this.basePath = basePath;
//         this.resourcePath = resourcePath;
//         this.apis = apis.isEmpty() ? null : apis;
//         this.models = models.isEmpty() ? null : models;
//     }
// 
//     public String getApiVersion() {
//         return apiVersion;
//     }
// 
//     public String getSwaggerVersion() {
//         return swaggerVersion;
//     }
// 
//     public String getBasePath() {
//         return basePath;
//     }
// 
//     public String getResourcePath() {
//         return resourcePath;
//     }
// 
//     public Collection<Api> getApis() {
//         return apis;
//     }
// 
//     public Map<String, Model> getModels() {
//         return models;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ApiDeclaration that = (ApiDeclaration) o;
//         return Objects.equal(apiVersion, that.apiVersion)
//                 && Objects.equal(swaggerVersion, that.swaggerVersion)
//                 && Objects.equal(basePath, that.basePath)
//                 && Objects.equal(resourcePath, that.resourcePath)
//                 && Objects.equal(apis, that.apis)
//                 && Objects.equal(models, that.models);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(apiVersion, swaggerVersion, basePath, resourcePath, apis, models);
//     }
// 
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("apiVersion", apiVersion)
//                 .add("swaggerVersion", swaggerVersion)
//                 .add("basePath", basePath)
//                 .add("resourcePath", resourcePath)
//                 .add("apis", apis)
//                 .add("models", models)
//                 .toString();
//     }
// }
// 
// Path: jaxrs-doclet/src/main/java/com/hypnoticocelot/jaxrs/doclet/model/ResourceListing.java
// public class ResourceListing {
//     private String apiVersion;
//     private String basePath;
//     private List<ResourceListingAPI> apis;
// 
//     @SuppressWarnings("unused")
//     private ResourceListing() {
//     }
// 
//     public ResourceListing(String apiVersion, String basePath, List<ResourceListingAPI> apis) {
//         this.apiVersion = apiVersion;
//         this.basePath = basePath;
//         this.apis = apis;
//     }
// 
//     public String getApiVersion() {
//         return apiVersion;
//     }
// 
//     public String getSwaggerVersion() {
//         return "1.1";
//     }
// 
//     public String getBasePath() {
//         return basePath;
//     }
// 
//     public List<ResourceListingAPI> getApis() {
//         return apis;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ResourceListing that = (ResourceListing) o;
//         return Objects.equal(apiVersion, that.apiVersion)
//                 && Objects.equal(basePath, that.basePath)
//                 && Objects.equal(apis, that.apis);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(apiVersion, basePath, apis);
//     }
// 
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("apiVersion", apiVersion)
//                 .add("basePath", basePath)
//                 .add("apis", apis)
//                 .toString();
//     }
// }


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.common.io.ByteStreams;
import com.hypnoticocelot.jaxrs.doclet.model.ApiDeclaration;
import com.hypnoticocelot.jaxrs.doclet.model.ResourceListing;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
package com.hypnoticocelot.jaxrs.doclet;



public class ObjectMapperRecorder implements Recorder {
    private final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperRecorder() {
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }

    @Override
    public void record(File file, ApiDeclaration declaration) throws IOException {
        mapper.writeValue(file, declaration);
    }

    @Override
// Path: jaxrs-doclet/src/main/java/com/hypnoticocelot/jaxrs/doclet/model/ApiDeclaration.java
// @JsonPropertyOrder({"apiVersion", "swaggerVersion", "basePath", "resourcePath", "apis", "models"})
// public class ApiDeclaration {
//     private String apiVersion;
//     private String swaggerVersion;
//     private String basePath;
//     private String resourcePath;
//     private Collection<Api> apis;
//     private Map<String, Model> models;
// 
//     @SuppressWarnings("unused")
//     private ApiDeclaration() {
//     }
// 
//     public ApiDeclaration(String apiVersion, String basePath, String resourcePath, Collection<Api> apis, Map<String, Model> models) {
//         this.apiVersion = apiVersion;
//         this.swaggerVersion = "1.1";
//         this.basePath = basePath;
//         this.resourcePath = resourcePath;
//         this.apis = apis.isEmpty() ? null : apis;
//         this.models = models.isEmpty() ? null : models;
//     }
// 
//     public String getApiVersion() {
//         return apiVersion;
//     }
// 
//     public String getSwaggerVersion() {
//         return swaggerVersion;
//     }
// 
//     public String getBasePath() {
//         return basePath;
//     }
// 
//     public String getResourcePath() {
//         return resourcePath;
//     }
// 
//     public Collection<Api> getApis() {
//         return apis;
//     }
// 
//     public Map<String, Model> getModels() {
//         return models;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ApiDeclaration that = (ApiDeclaration) o;
//         return Objects.equal(apiVersion, that.apiVersion)
//                 && Objects.equal(swaggerVersion, that.swaggerVersion)
//                 && Objects.equal(basePath, that.basePath)
//                 && Objects.equal(resourcePath, that.resourcePath)
//                 && Objects.equal(apis, that.apis)
//                 && Objects.equal(models, that.models);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(apiVersion, swaggerVersion, basePath, resourcePath, apis, models);
//     }
// 
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("apiVersion", apiVersion)
//                 .add("swaggerVersion", swaggerVersion)
//                 .add("basePath", basePath)
//                 .add("resourcePath", resourcePath)
//                 .add("apis", apis)
//                 .add("models", models)
//                 .toString();
//     }
// }
// 
// Path: jaxrs-doclet/src/main/java/com/hypnoticocelot/jaxrs/doclet/model/ResourceListing.java
// public class ResourceListing {
//     private String apiVersion;
//     private String basePath;
//     private List<ResourceListingAPI> apis;
// 
//     @SuppressWarnings("unused")
//     private ResourceListing() {
//     }
// 
//     public ResourceListing(String apiVersion, String basePath, List<ResourceListingAPI> apis) {
//         this.apiVersion = apiVersion;
//         this.basePath = basePath;
//         this.apis = apis;
//     }
// 
//     public String getApiVersion() {
//         return apiVersion;
//     }
// 
//     public String getSwaggerVersion() {
//         return "1.1";
//     }
// 
//     public String getBasePath() {
//         return basePath;
//     }
// 
//     public List<ResourceListingAPI> getApis() {
//         return apis;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         ResourceListing that = (ResourceListing) o;
//         return Objects.equal(apiVersion, that.apiVersion)
//                 && Objects.equal(basePath, that.basePath)
//                 && Objects.equal(apis, that.apis);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(apiVersion, basePath, apis);
//     }
// 
//     @Override
//     public String toString() {
//         return Objects.toStringHelper(this)
//                 .add("apiVersion", apiVersion)
//                 .add("basePath", basePath)
//                 .add("apis", apis)
//                 .toString();
//     }
// }


// Path: jaxrs-doclet/src/main/java/com/hypnoticocelot/jaxrs/doclet/ObjectMapperRecorder.java
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.common.io.ByteStreams;
import com.hypnoticocelot.jaxrs.doclet.model.ApiDeclaration;
import com.hypnoticocelot.jaxrs.doclet.model.ResourceListing;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

package com.hypnoticocelot.jaxrs.doclet;



public class ObjectMapperRecorder implements Recorder {
    private final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperRecorder() {
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }

    @Override
    public void record(File file, ApiDeclaration declaration) throws IOException {
        mapper.writeValue(file, declaration);
    }

    @Override
    public void record(File file, ResourceListing listing) throws IOException {