// Path: core/src/main/java/moe/banana/jsonapi2/HasOne.java
// public final class HasOne<T extends Resource> extends Relationship<T> implements Serializable {
// 
//     private ResourceIdentifier linkedResource;
// 
//     public HasOne() { }
// 
//     public HasOne(String type, String id) {
//         this(new ResourceIdentifier(type, id));
//     }
// 
//     public HasOne(ResourceIdentifier linkedResource) {
//         set(linkedResource);
//     }
// 
//     @Override
//     public T get(Document document) {
//         return get(document, null);
//     }
// 
//     public T get(Document document, T defaultValue) {
//         T obj = document.find(linkedResource);
//         if (obj == null) {
//             return defaultValue;
//         } else {
//             return obj;
//         }
//     }
// 
//     public ResourceIdentifier get() {
//         return linkedResource;
//     }
// 
//     public void set(ResourceIdentifier identifier) {
//         if (identifier == null) {
//             linkedResource = null;
//         } else if (ResourceIdentifier.class == identifier.getClass()) {
//             linkedResource = identifier;
//         } else {
//             set(identifier.getType(), identifier.getId());
//         }
//     }
// 
//     public void set(String type, String id) {
//         set(new ResourceIdentifier(type, id));
//     }
// 
//     @Override
//     public String toString() {
//         return "HasOne{" +
//                 "linkedResource=" + linkedResource +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         HasOne<?> hasOne = (HasOne<?>) o;
// 
//         return linkedResource != null ? linkedResource.equals(hasOne.linkedResource) : hasOne.linkedResource == null;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return linkedResource != null ? linkedResource.hashCode() : 0;
//     }
// 
// 
//     static class Adapter<T extends Resource> extends JsonAdapter<HasOne<T>> {
// 
//         JsonAdapter<ResourceIdentifier> resourceIdentifierJsonAdapter;
//         JsonAdapter<JsonBuffer> jsonBufferJsonAdapter;
// 
//         public Adapter(Moshi moshi) {
//             resourceIdentifierJsonAdapter = moshi.adapter(ResourceIdentifier.class);
//             jsonBufferJsonAdapter = moshi.adapter(JsonBuffer.class);
//         }
// 
//         @Override
//         public HasOne<T> fromJson(JsonReader reader) throws IOException {
//             HasOne<T> relationship = new HasOne<>();
//             reader.beginObject();
//             while (reader.hasNext()) {
//                 switch (reader.nextName()) {
//                     case "data":
//                         relationship.set(nextNullableObject(reader, resourceIdentifierJsonAdapter));
//                         break;
//                     case "meta":
//                         relationship.setMeta(nextNullableObject(reader, jsonBufferJsonAdapter));
//                         break;
//                     case "links":
//                         relationship.setLinks(nextNullableObject(reader, jsonBufferJsonAdapter));
//                         break;
//                     default:
//                         reader.skipValue();
//                         break;
//                 }
//             }
//             reader.endObject();
//             return relationship;
//         }
// 
//         @Override
//         public void toJson(JsonWriter writer, HasOne<T> value) throws IOException {
//             writer.beginObject();
//             writeNullable(writer, resourceIdentifierJsonAdapter, "data", value.linkedResource, true);
//             writeNullable(writer, jsonBufferJsonAdapter, "meta", value.getMeta());
//             writeNullable(writer, jsonBufferJsonAdapter, "links", value.getLinks());
//             writer.endObject();
//         }
//     }
// }
// 
// Path: core/src/main/java/moe/banana/jsonapi2/Policy.java
// public enum Policy {
// 
//     /**
//      * Registered class is intended to be used in both serialization and deserialization process.
//      * Other class with same type name can only be registered with {@link #SERIALIZATION_ONLY} policy.
//      */
//     SERIALIZATION_AND_DESERIALIZATION,
// 
//     /**
//      * Registered class is available only when doing serialization.
//      */
//     SERIALIZATION_ONLY,
// 
//     /**
//      * Registered class is available only when doing de-serialization.
//      * Other class with same type name can only be registered with {@link #SERIALIZATION_ONLY} policy.
//      */
//     DESERIALIZATION_ONLY
// 
// }
// 
// Path: core/src/main/java/moe/banana/jsonapi2/Resource.java
// public abstract class Resource extends ResourceIdentifier implements Serializable {
// 
//     public Resource() {
//         setType(AnnotationUtils.typeNameOf(getClass()));
//     }
// 
//     private JsonBuffer links;
// 
//     public JsonBuffer getLinks() {
//         return links;
//     }
// 
//     public void setLinks(JsonBuffer links) {
//         this.links = links;
//     }
// }


import moe.banana.jsonapi2.HasOne;
import moe.banana.jsonapi2.JsonApi;
import moe.banana.jsonapi2.Policy;
import moe.banana.jsonapi2.Resource;
    }

    public Boolean getVisible() {
        return visible;
    }

    public void setVisible(Boolean visible) {
        this.visible = visible;
    }

    public Double getShutter() {
        return shutter;
    }

    public void setShutter(Double shutter) {
        this.shutter = shutter;
    }

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    public HasOne<Person> getAuthor() {
        return author;
    }

// Path: core/src/main/java/moe/banana/jsonapi2/HasOne.java
// public final class HasOne<T extends Resource> extends Relationship<T> implements Serializable {
// 
//     private ResourceIdentifier linkedResource;
// 
//     public HasOne() { }
// 
//     public HasOne(String type, String id) {
//         this(new ResourceIdentifier(type, id));
//     }
// 
//     public HasOne(ResourceIdentifier linkedResource) {
//         set(linkedResource);
//     }
// 
//     @Override
//     public T get(Document document) {
//         return get(document, null);
//     }
// 
//     public T get(Document document, T defaultValue) {
//         T obj = document.find(linkedResource);
//         if (obj == null) {
//             return defaultValue;
//         } else {
//             return obj;
//         }
//     }
// 
//     public ResourceIdentifier get() {
//         return linkedResource;
//     }
// 
//     public void set(ResourceIdentifier identifier) {
//         if (identifier == null) {
//             linkedResource = null;
//         } else if (ResourceIdentifier.class == identifier.getClass()) {
//             linkedResource = identifier;
//         } else {
//             set(identifier.getType(), identifier.getId());
//         }
//     }
// 
//     public void set(String type, String id) {
//         set(new ResourceIdentifier(type, id));
//     }
// 
//     @Override
//     public String toString() {
//         return "HasOne{" +
//                 "linkedResource=" + linkedResource +
//                 '}';
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         HasOne<?> hasOne = (HasOne<?>) o;
// 
//         return linkedResource != null ? linkedResource.equals(hasOne.linkedResource) : hasOne.linkedResource == null;
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return linkedResource != null ? linkedResource.hashCode() : 0;
//     }
// 
// 
//     static class Adapter<T extends Resource> extends JsonAdapter<HasOne<T>> {
// 
//         JsonAdapter<ResourceIdentifier> resourceIdentifierJsonAdapter;
//         JsonAdapter<JsonBuffer> jsonBufferJsonAdapter;
// 
//         public Adapter(Moshi moshi) {
//             resourceIdentifierJsonAdapter = moshi.adapter(ResourceIdentifier.class);
//             jsonBufferJsonAdapter = moshi.adapter(JsonBuffer.class);
//         }
// 
//         @Override
//         public HasOne<T> fromJson(JsonReader reader) throws IOException {
//             HasOne<T> relationship = new HasOne<>();
//             reader.beginObject();
//             while (reader.hasNext()) {
//                 switch (reader.nextName()) {
//                     case "data":
//                         relationship.set(nextNullableObject(reader, resourceIdentifierJsonAdapter));
//                         break;
//                     case "meta":
//                         relationship.setMeta(nextNullableObject(reader, jsonBufferJsonAdapter));
//                         break;
//                     case "links":
//                         relationship.setLinks(nextNullableObject(reader, jsonBufferJsonAdapter));
//                         break;
//                     default:
//                         reader.skipValue();
//                         break;
//                 }
//             }
//             reader.endObject();
//             return relationship;
//         }
// 
//         @Override
//         public void toJson(JsonWriter writer, HasOne<T> value) throws IOException {
//             writer.beginObject();
//             writeNullable(writer, resourceIdentifierJsonAdapter, "data", value.linkedResource, true);
//             writeNullable(writer, jsonBufferJsonAdapter, "meta", value.getMeta());
//             writeNullable(writer, jsonBufferJsonAdapter, "links", value.getLinks());
//             writer.endObject();
//         }
//     }
// }
// 
// Path: core/src/main/java/moe/banana/jsonapi2/Policy.java
// public enum Policy {
// 
//     /**
//      * Registered class is intended to be used in both serialization and deserialization process.
//      * Other class with same type name can only be registered with {@link #SERIALIZATION_ONLY} policy.
//      */
//     SERIALIZATION_AND_DESERIALIZATION,
// 
//     /**
//      * Registered class is available only when doing serialization.
//      */
//     SERIALIZATION_ONLY,
// 
//     /**
//      * Registered class is available only when doing de-serialization.
//      * Other class with same type name can only be registered with {@link #SERIALIZATION_ONLY} policy.
//      */
//     DESERIALIZATION_ONLY
// 
// }
// 
// Path: core/src/main/java/moe/banana/jsonapi2/Resource.java
// public abstract class Resource extends ResourceIdentifier implements Serializable {
// 
//     public Resource() {
//         setType(AnnotationUtils.typeNameOf(getClass()));
//     }
// 
//     private JsonBuffer links;
// 
//     public JsonBuffer getLinks() {
//         return links;
//     }
// 
//     public void setLinks(JsonBuffer links) {
//         this.links = links;
//     }
// }


// Path: core/src/test/java/moe/banana/jsonapi2/model/Photo.java
import moe.banana.jsonapi2.HasOne;
import moe.banana.jsonapi2.JsonApi;
import moe.banana.jsonapi2.Policy;
import moe.banana.jsonapi2.Resource;

    }

    public Boolean getVisible() {
        return visible;
    }

    public void setVisible(Boolean visible) {
        this.visible = visible;
    }

    public Double getShutter() {
        return shutter;
    }

    public void setShutter(Double shutter) {
        this.shutter = shutter;
    }

    public Location getLocation() {
        return location;
    }

    public void setLocation(Location location) {
        this.location = location;
    }

    public HasOne<Person> getAuthor() {
        return author;
    }

    public void setAuthor(HasOne<Person> author) {