/* 
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

package dev.plexapi.sdk.models.operations;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.plexapi.sdk.utils.Utils;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.Long;
import java.lang.Override;
import java.lang.String;
import java.lang.SuppressWarnings;
import java.util.List;
import java.util.Objects;
import java.util.Optional;


public class GetAllLibrariesDirectory {

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("allowSync")
    private Optional<Boolean> allowSync;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("art")
    private Optional<String> art;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("composite")
    private Optional<String> composite;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("filters")
    private Optional<Boolean> filters;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("refreshing")
    private Optional<Boolean> refreshing;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("thumb")
    private Optional<String> thumb;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("key")
    private Optional<String> key;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("type")
    private Optional<String> type;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("title")
    private Optional<String> title;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("agent")
    private Optional<String> agent;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("scanner")
    private Optional<String> scanner;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("language")
    private Optional<String> language;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("uuid")
    private Optional<String> uuid;

    /**
     * Unix epoch datetime
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("updatedAt")
    private Optional<Long> updatedAt;

    /**
     * Unix epoch datetime
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("createdAt")
    private Optional<Long> createdAt;

    /**
     * Unix epoch datetime
     */
    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("scannedAt")
    private Optional<Long> scannedAt;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("content")
    private Optional<Boolean> content;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("directory")
    private Optional<Boolean> directory;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("contentChangedAt")
    private Optional<Integer> contentChangedAt;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("hidden")
    private Optional<Integer> hidden;

    @JsonInclude(Include.NON_ABSENT)
    @JsonProperty("Location")
    private Optional<? extends List<Location>> location;

    @JsonCreator
    public GetAllLibrariesDirectory(
            @JsonProperty("allowSync") Optional<Boolean> allowSync,
            @JsonProperty("art") Optional<String> art,
            @JsonProperty("composite") Optional<String> composite,
            @JsonProperty("filters") Optional<Boolean> filters,
            @JsonProperty("refreshing") Optional<Boolean> refreshing,
            @JsonProperty("thumb") Optional<String> thumb,
            @JsonProperty("key") Optional<String> key,
            @JsonProperty("type") Optional<String> type,
            @JsonProperty("title") Optional<String> title,
            @JsonProperty("agent") Optional<String> agent,
            @JsonProperty("scanner") Optional<String> scanner,
            @JsonProperty("language") Optional<String> language,
            @JsonProperty("uuid") Optional<String> uuid,
            @JsonProperty("updatedAt") Optional<Long> updatedAt,
            @JsonProperty("createdAt") Optional<Long> createdAt,
            @JsonProperty("scannedAt") Optional<Long> scannedAt,
            @JsonProperty("content") Optional<Boolean> content,
            @JsonProperty("directory") Optional<Boolean> directory,
            @JsonProperty("contentChangedAt") Optional<Integer> contentChangedAt,
            @JsonProperty("hidden") Optional<Integer> hidden,
            @JsonProperty("Location") Optional<? extends List<Location>> location) {
        Utils.checkNotNull(allowSync, "allowSync");
        Utils.checkNotNull(art, "art");
        Utils.checkNotNull(composite, "composite");
        Utils.checkNotNull(filters, "filters");
        Utils.checkNotNull(refreshing, "refreshing");
        Utils.checkNotNull(thumb, "thumb");
        Utils.checkNotNull(key, "key");
        Utils.checkNotNull(type, "type");
        Utils.checkNotNull(title, "title");
        Utils.checkNotNull(agent, "agent");
        Utils.checkNotNull(scanner, "scanner");
        Utils.checkNotNull(language, "language");
        Utils.checkNotNull(uuid, "uuid");
        Utils.checkNotNull(updatedAt, "updatedAt");
        Utils.checkNotNull(createdAt, "createdAt");
        Utils.checkNotNull(scannedAt, "scannedAt");
        Utils.checkNotNull(content, "content");
        Utils.checkNotNull(directory, "directory");
        Utils.checkNotNull(contentChangedAt, "contentChangedAt");
        Utils.checkNotNull(hidden, "hidden");
        Utils.checkNotNull(location, "location");
        this.allowSync = allowSync;
        this.art = art;
        this.composite = composite;
        this.filters = filters;
        this.refreshing = refreshing;
        this.thumb = thumb;
        this.key = key;
        this.type = type;
        this.title = title;
        this.agent = agent;
        this.scanner = scanner;
        this.language = language;
        this.uuid = uuid;
        this.updatedAt = updatedAt;
        this.createdAt = createdAt;
        this.scannedAt = scannedAt;
        this.content = content;
        this.directory = directory;
        this.contentChangedAt = contentChangedAt;
        this.hidden = hidden;
        this.location = location;
    }
    
    public GetAllLibrariesDirectory() {
        this(Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
    }

    @JsonIgnore
    public Optional<Boolean> allowSync() {
        return allowSync;
    }

    @JsonIgnore
    public Optional<String> art() {
        return art;
    }

    @JsonIgnore
    public Optional<String> composite() {
        return composite;
    }

    @JsonIgnore
    public Optional<Boolean> filters() {
        return filters;
    }

    @JsonIgnore
    public Optional<Boolean> refreshing() {
        return refreshing;
    }

    @JsonIgnore
    public Optional<String> thumb() {
        return thumb;
    }

    @JsonIgnore
    public Optional<String> key() {
        return key;
    }

    @JsonIgnore
    public Optional<String> type() {
        return type;
    }

    @JsonIgnore
    public Optional<String> title() {
        return title;
    }

    @JsonIgnore
    public Optional<String> agent() {
        return agent;
    }

    @JsonIgnore
    public Optional<String> scanner() {
        return scanner;
    }

    @JsonIgnore
    public Optional<String> language() {
        return language;
    }

    @JsonIgnore
    public Optional<String> uuid() {
        return uuid;
    }

    /**
     * Unix epoch datetime
     */
    @JsonIgnore
    public Optional<Long> updatedAt() {
        return updatedAt;
    }

    /**
     * Unix epoch datetime
     */
    @JsonIgnore
    public Optional<Long> createdAt() {
        return createdAt;
    }

    /**
     * Unix epoch datetime
     */
    @JsonIgnore
    public Optional<Long> scannedAt() {
        return scannedAt;
    }

    @JsonIgnore
    public Optional<Boolean> content() {
        return content;
    }

    @JsonIgnore
    public Optional<Boolean> directory() {
        return directory;
    }

    @JsonIgnore
    public Optional<Integer> contentChangedAt() {
        return contentChangedAt;
    }

    @JsonIgnore
    public Optional<Integer> hidden() {
        return hidden;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Optional<List<Location>> location() {
        return (Optional<List<Location>>) location;
    }

    public final static Builder builder() {
        return new Builder();
    }

    public GetAllLibrariesDirectory withAllowSync(boolean allowSync) {
        Utils.checkNotNull(allowSync, "allowSync");
        this.allowSync = Optional.ofNullable(allowSync);
        return this;
    }

    public GetAllLibrariesDirectory withAllowSync(Optional<Boolean> allowSync) {
        Utils.checkNotNull(allowSync, "allowSync");
        this.allowSync = allowSync;
        return this;
    }

    public GetAllLibrariesDirectory withArt(String art) {
        Utils.checkNotNull(art, "art");
        this.art = Optional.ofNullable(art);
        return this;
    }

    public GetAllLibrariesDirectory withArt(Optional<String> art) {
        Utils.checkNotNull(art, "art");
        this.art = art;
        return this;
    }

    public GetAllLibrariesDirectory withComposite(String composite) {
        Utils.checkNotNull(composite, "composite");
        this.composite = Optional.ofNullable(composite);
        return this;
    }

    public GetAllLibrariesDirectory withComposite(Optional<String> composite) {
        Utils.checkNotNull(composite, "composite");
        this.composite = composite;
        return this;
    }

    public GetAllLibrariesDirectory withFilters(boolean filters) {
        Utils.checkNotNull(filters, "filters");
        this.filters = Optional.ofNullable(filters);
        return this;
    }

    public GetAllLibrariesDirectory withFilters(Optional<Boolean> filters) {
        Utils.checkNotNull(filters, "filters");
        this.filters = filters;
        return this;
    }

    public GetAllLibrariesDirectory withRefreshing(boolean refreshing) {
        Utils.checkNotNull(refreshing, "refreshing");
        this.refreshing = Optional.ofNullable(refreshing);
        return this;
    }

    public GetAllLibrariesDirectory withRefreshing(Optional<Boolean> refreshing) {
        Utils.checkNotNull(refreshing, "refreshing");
        this.refreshing = refreshing;
        return this;
    }

    public GetAllLibrariesDirectory withThumb(String thumb) {
        Utils.checkNotNull(thumb, "thumb");
        this.thumb = Optional.ofNullable(thumb);
        return this;
    }

    public GetAllLibrariesDirectory withThumb(Optional<String> thumb) {
        Utils.checkNotNull(thumb, "thumb");
        this.thumb = thumb;
        return this;
    }

    public GetAllLibrariesDirectory withKey(String key) {
        Utils.checkNotNull(key, "key");
        this.key = Optional.ofNullable(key);
        return this;
    }

    public GetAllLibrariesDirectory withKey(Optional<String> key) {
        Utils.checkNotNull(key, "key");
        this.key = key;
        return this;
    }

    public GetAllLibrariesDirectory withType(String type) {
        Utils.checkNotNull(type, "type");
        this.type = Optional.ofNullable(type);
        return this;
    }

    public GetAllLibrariesDirectory withType(Optional<String> type) {
        Utils.checkNotNull(type, "type");
        this.type = type;
        return this;
    }

    public GetAllLibrariesDirectory withTitle(String title) {
        Utils.checkNotNull(title, "title");
        this.title = Optional.ofNullable(title);
        return this;
    }

    public GetAllLibrariesDirectory withTitle(Optional<String> title) {
        Utils.checkNotNull(title, "title");
        this.title = title;
        return this;
    }

    public GetAllLibrariesDirectory withAgent(String agent) {
        Utils.checkNotNull(agent, "agent");
        this.agent = Optional.ofNullable(agent);
        return this;
    }

    public GetAllLibrariesDirectory withAgent(Optional<String> agent) {
        Utils.checkNotNull(agent, "agent");
        this.agent = agent;
        return this;
    }

    public GetAllLibrariesDirectory withScanner(String scanner) {
        Utils.checkNotNull(scanner, "scanner");
        this.scanner = Optional.ofNullable(scanner);
        return this;
    }

    public GetAllLibrariesDirectory withScanner(Optional<String> scanner) {
        Utils.checkNotNull(scanner, "scanner");
        this.scanner = scanner;
        return this;
    }

    public GetAllLibrariesDirectory withLanguage(String language) {
        Utils.checkNotNull(language, "language");
        this.language = Optional.ofNullable(language);
        return this;
    }

    public GetAllLibrariesDirectory withLanguage(Optional<String> language) {
        Utils.checkNotNull(language, "language");
        this.language = language;
        return this;
    }

    public GetAllLibrariesDirectory withUuid(String uuid) {
        Utils.checkNotNull(uuid, "uuid");
        this.uuid = Optional.ofNullable(uuid);
        return this;
    }

    public GetAllLibrariesDirectory withUuid(Optional<String> uuid) {
        Utils.checkNotNull(uuid, "uuid");
        this.uuid = uuid;
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withUpdatedAt(long updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = Optional.ofNullable(updatedAt);
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withUpdatedAt(Optional<Long> updatedAt) {
        Utils.checkNotNull(updatedAt, "updatedAt");
        this.updatedAt = updatedAt;
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withCreatedAt(long createdAt) {
        Utils.checkNotNull(createdAt, "createdAt");
        this.createdAt = Optional.ofNullable(createdAt);
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withCreatedAt(Optional<Long> createdAt) {
        Utils.checkNotNull(createdAt, "createdAt");
        this.createdAt = createdAt;
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withScannedAt(long scannedAt) {
        Utils.checkNotNull(scannedAt, "scannedAt");
        this.scannedAt = Optional.ofNullable(scannedAt);
        return this;
    }

    /**
     * Unix epoch datetime
     */
    public GetAllLibrariesDirectory withScannedAt(Optional<Long> scannedAt) {
        Utils.checkNotNull(scannedAt, "scannedAt");
        this.scannedAt = scannedAt;
        return this;
    }

    public GetAllLibrariesDirectory withContent(boolean content) {
        Utils.checkNotNull(content, "content");
        this.content = Optional.ofNullable(content);
        return this;
    }

    public GetAllLibrariesDirectory withContent(Optional<Boolean> content) {
        Utils.checkNotNull(content, "content");
        this.content = content;
        return this;
    }

    public GetAllLibrariesDirectory withDirectory(boolean directory) {
        Utils.checkNotNull(directory, "directory");
        this.directory = Optional.ofNullable(directory);
        return this;
    }

    public GetAllLibrariesDirectory withDirectory(Optional<Boolean> directory) {
        Utils.checkNotNull(directory, "directory");
        this.directory = directory;
        return this;
    }

    public GetAllLibrariesDirectory withContentChangedAt(int contentChangedAt) {
        Utils.checkNotNull(contentChangedAt, "contentChangedAt");
        this.contentChangedAt = Optional.ofNullable(contentChangedAt);
        return this;
    }

    public GetAllLibrariesDirectory withContentChangedAt(Optional<Integer> contentChangedAt) {
        Utils.checkNotNull(contentChangedAt, "contentChangedAt");
        this.contentChangedAt = contentChangedAt;
        return this;
    }

    public GetAllLibrariesDirectory withHidden(int hidden) {
        Utils.checkNotNull(hidden, "hidden");
        this.hidden = Optional.ofNullable(hidden);
        return this;
    }

    public GetAllLibrariesDirectory withHidden(Optional<Integer> hidden) {
        Utils.checkNotNull(hidden, "hidden");
        this.hidden = hidden;
        return this;
    }

    public GetAllLibrariesDirectory withLocation(List<Location> location) {
        Utils.checkNotNull(location, "location");
        this.location = Optional.ofNullable(location);
        return this;
    }

    public GetAllLibrariesDirectory withLocation(Optional<? extends List<Location>> location) {
        Utils.checkNotNull(location, "location");
        this.location = location;
        return this;
    }
    
    @Override
    public boolean equals(java.lang.Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        GetAllLibrariesDirectory other = (GetAllLibrariesDirectory) o;
        return 
            Objects.deepEquals(this.allowSync, other.allowSync) &&
            Objects.deepEquals(this.art, other.art) &&
            Objects.deepEquals(this.composite, other.composite) &&
            Objects.deepEquals(this.filters, other.filters) &&
            Objects.deepEquals(this.refreshing, other.refreshing) &&
            Objects.deepEquals(this.thumb, other.thumb) &&
            Objects.deepEquals(this.key, other.key) &&
            Objects.deepEquals(this.type, other.type) &&
            Objects.deepEquals(this.title, other.title) &&
            Objects.deepEquals(this.agent, other.agent) &&
            Objects.deepEquals(this.scanner, other.scanner) &&
            Objects.deepEquals(this.language, other.language) &&
            Objects.deepEquals(this.uuid, other.uuid) &&
            Objects.deepEquals(this.updatedAt, other.updatedAt) &&
            Objects.deepEquals(this.createdAt, other.createdAt) &&
            Objects.deepEquals(this.scannedAt, other.scannedAt) &&
            Objects.deepEquals(this.content, other.content) &&
            Objects.deepEquals(this.directory, other.directory) &&
            Objects.deepEquals(this.contentChangedAt, other.contentChangedAt) &&
            Objects.deepEquals(this.hidden, other.hidden) &&
            Objects.deepEquals(this.location, other.location);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(
            allowSync,
            art,
            composite,
            filters,
            refreshing,
            thumb,
            key,
            type,
            title,
            agent,
            scanner,
            language,
            uuid,
            updatedAt,
            createdAt,
            scannedAt,
            content,
            directory,
            contentChangedAt,
            hidden,
            location);
    }
    
    @Override
    public String toString() {
        return Utils.toString(GetAllLibrariesDirectory.class,
                "allowSync", allowSync,
                "art", art,
                "composite", composite,
                "filters", filters,
                "refreshing", refreshing,
                "thumb", thumb,
                "key", key,
                "type", type,
                "title", title,
                "agent", agent,
                "scanner", scanner,
                "language", language,
                "uuid", uuid,
                "updatedAt", updatedAt,
                "createdAt", createdAt,
                "scannedAt", scannedAt,
                "content", content,
                "directory", directory,
                "contentChangedAt", contentChangedAt,
                "hidden", hidden,
                "location", location);
    }
    
    public final static class Builder {
 
        private Optional<Boolean> allowSync = Optional.empty();
 
        private Optional<String> art = Optional.empty();
 
        private Optional<String> composite = Optional.empty();
 
        private Optional<Boolean> filters = Optional.empty();
 
        private Optional<Boolean> refreshing = Optional.empty();
 
        private Optional<String> thumb = Optional.empty();
 
        private Optional<String> key = Optional.empty();
 
        private Optional<String> type = Optional.empty();
 
        private Optional<String> title = Optional.empty();
 
        private Optional<String> agent = Optional.empty();
 
        private Optional<String> scanner = Optional.empty();
 
        private Optional<String> language = Optional.empty();
 
        private Optional<String> uuid = Optional.empty();
 
        private Optional<Long> updatedAt = Optional.empty();
 
        private Optional<Long> createdAt = Optional.empty();
 
        private Optional<Long> scannedAt = Optional.empty();
 
        private Optional<Boolean> content = Optional.empty();
 
        private Optional<Boolean> directory = Optional.empty();
 
        private Optional<Integer> contentChangedAt = Optional.empty();
 
        private Optional<Integer> hidden = Optional.empty();
 
        private Optional<? extends List<Location>> location = Optional.empty();  
        
        private Builder() {
          // force use of static builder() method
        }

        public Builder allowSync(boolean allowSync) {
            Utils.checkNotNull(allowSync, "allowSync");
            this.allowSync = Optional.ofNullable(allowSync);
            return this;
        }

        public Builder allowSync(Optional<Boolean> allowSync) {
            Utils.checkNotNull(allowSync, "allowSync");
            this.allowSync = allowSync;
            return this;
        }

        public Builder art(String art) {
            Utils.checkNotNull(art, "art");
            this.art = Optional.ofNullable(art);
            return this;
        }

        public Builder art(Optional<String> art) {
            Utils.checkNotNull(art, "art");
            this.art = art;
            return this;
        }

        public Builder composite(String composite) {
            Utils.checkNotNull(composite, "composite");
            this.composite = Optional.ofNullable(composite);
            return this;
        }

        public Builder composite(Optional<String> composite) {
            Utils.checkNotNull(composite, "composite");
            this.composite = composite;
            return this;
        }

        public Builder filters(boolean filters) {
            Utils.checkNotNull(filters, "filters");
            this.filters = Optional.ofNullable(filters);
            return this;
        }

        public Builder filters(Optional<Boolean> filters) {
            Utils.checkNotNull(filters, "filters");
            this.filters = filters;
            return this;
        }

        public Builder refreshing(boolean refreshing) {
            Utils.checkNotNull(refreshing, "refreshing");
            this.refreshing = Optional.ofNullable(refreshing);
            return this;
        }

        public Builder refreshing(Optional<Boolean> refreshing) {
            Utils.checkNotNull(refreshing, "refreshing");
            this.refreshing = refreshing;
            return this;
        }

        public Builder thumb(String thumb) {
            Utils.checkNotNull(thumb, "thumb");
            this.thumb = Optional.ofNullable(thumb);
            return this;
        }

        public Builder thumb(Optional<String> thumb) {
            Utils.checkNotNull(thumb, "thumb");
            this.thumb = thumb;
            return this;
        }

        public Builder key(String key) {
            Utils.checkNotNull(key, "key");
            this.key = Optional.ofNullable(key);
            return this;
        }

        public Builder key(Optional<String> key) {
            Utils.checkNotNull(key, "key");
            this.key = key;
            return this;
        }

        public Builder type(String type) {
            Utils.checkNotNull(type, "type");
            this.type = Optional.ofNullable(type);
            return this;
        }

        public Builder type(Optional<String> type) {
            Utils.checkNotNull(type, "type");
            this.type = type;
            return this;
        }

        public Builder title(String title) {
            Utils.checkNotNull(title, "title");
            this.title = Optional.ofNullable(title);
            return this;
        }

        public Builder title(Optional<String> title) {
            Utils.checkNotNull(title, "title");
            this.title = title;
            return this;
        }

        public Builder agent(String agent) {
            Utils.checkNotNull(agent, "agent");
            this.agent = Optional.ofNullable(agent);
            return this;
        }

        public Builder agent(Optional<String> agent) {
            Utils.checkNotNull(agent, "agent");
            this.agent = agent;
            return this;
        }

        public Builder scanner(String scanner) {
            Utils.checkNotNull(scanner, "scanner");
            this.scanner = Optional.ofNullable(scanner);
            return this;
        }

        public Builder scanner(Optional<String> scanner) {
            Utils.checkNotNull(scanner, "scanner");
            this.scanner = scanner;
            return this;
        }

        public Builder language(String language) {
            Utils.checkNotNull(language, "language");
            this.language = Optional.ofNullable(language);
            return this;
        }

        public Builder language(Optional<String> language) {
            Utils.checkNotNull(language, "language");
            this.language = language;
            return this;
        }

        public Builder uuid(String uuid) {
            Utils.checkNotNull(uuid, "uuid");
            this.uuid = Optional.ofNullable(uuid);
            return this;
        }

        public Builder uuid(Optional<String> uuid) {
            Utils.checkNotNull(uuid, "uuid");
            this.uuid = uuid;
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder updatedAt(long updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = Optional.ofNullable(updatedAt);
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder updatedAt(Optional<Long> updatedAt) {
            Utils.checkNotNull(updatedAt, "updatedAt");
            this.updatedAt = updatedAt;
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder createdAt(long createdAt) {
            Utils.checkNotNull(createdAt, "createdAt");
            this.createdAt = Optional.ofNullable(createdAt);
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder createdAt(Optional<Long> createdAt) {
            Utils.checkNotNull(createdAt, "createdAt");
            this.createdAt = createdAt;
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder scannedAt(long scannedAt) {
            Utils.checkNotNull(scannedAt, "scannedAt");
            this.scannedAt = Optional.ofNullable(scannedAt);
            return this;
        }

        /**
         * Unix epoch datetime
         */
        public Builder scannedAt(Optional<Long> scannedAt) {
            Utils.checkNotNull(scannedAt, "scannedAt");
            this.scannedAt = scannedAt;
            return this;
        }

        public Builder content(boolean content) {
            Utils.checkNotNull(content, "content");
            this.content = Optional.ofNullable(content);
            return this;
        }

        public Builder content(Optional<Boolean> content) {
            Utils.checkNotNull(content, "content");
            this.content = content;
            return this;
        }

        public Builder directory(boolean directory) {
            Utils.checkNotNull(directory, "directory");
            this.directory = Optional.ofNullable(directory);
            return this;
        }

        public Builder directory(Optional<Boolean> directory) {
            Utils.checkNotNull(directory, "directory");
            this.directory = directory;
            return this;
        }

        public Builder contentChangedAt(int contentChangedAt) {
            Utils.checkNotNull(contentChangedAt, "contentChangedAt");
            this.contentChangedAt = Optional.ofNullable(contentChangedAt);
            return this;
        }

        public Builder contentChangedAt(Optional<Integer> contentChangedAt) {
            Utils.checkNotNull(contentChangedAt, "contentChangedAt");
            this.contentChangedAt = contentChangedAt;
            return this;
        }

        public Builder hidden(int hidden) {
            Utils.checkNotNull(hidden, "hidden");
            this.hidden = Optional.ofNullable(hidden);
            return this;
        }

        public Builder hidden(Optional<Integer> hidden) {
            Utils.checkNotNull(hidden, "hidden");
            this.hidden = hidden;
            return this;
        }

        public Builder location(List<Location> location) {
            Utils.checkNotNull(location, "location");
            this.location = Optional.ofNullable(location);
            return this;
        }

        public Builder location(Optional<? extends List<Location>> location) {
            Utils.checkNotNull(location, "location");
            this.location = location;
            return this;
        }
        
        public GetAllLibrariesDirectory build() {
            return new GetAllLibrariesDirectory(
                allowSync,
                art,
                composite,
                filters,
                refreshing,
                thumb,
                key,
                type,
                title,
                agent,
                scanner,
                language,
                uuid,
                updatedAt,
                createdAt,
                scannedAt,
                content,
                directory,
                contentChangedAt,
                hidden,
                location);
        }
    }
}

