/**
 * Generated by the protoc-gen-ts.  DO NOT EDIT!
 * compiler version: 3.19.1
 * source: google/firestore/v1/query_profile.proto
 * git: https://github.com/thesayyn/protoc-gen-ts */
import * as dependency_1 from "./../../api/field_behavior";
import * as dependency_2 from "./../../protobuf/duration";
import * as dependency_3 from "./../../protobuf/struct";
import * as pb_1 from "google-protobuf";
export class ExplainOptions extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        analyze?: boolean;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("analyze" in data && data.analyze != undefined) {
                this.analyze = data.analyze;
            }
        }
    }
    get analyze() {
        return pb_1.Message.getFieldWithDefault(this, 1, false) as boolean;
    }
    set analyze(value: boolean) {
        pb_1.Message.setField(this, 1, value);
    }
    static fromObject(data: {
        analyze?: boolean;
    }): ExplainOptions {
        const message = new ExplainOptions({});
        if (data.analyze != null) {
            message.analyze = data.analyze;
        }
        return message;
    }
    toObject() {
        const data: {
            analyze?: boolean;
        } = {};
        if (this.analyze != null) {
            data.analyze = this.analyze;
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.analyze != false)
            writer.writeBool(1, this.analyze);
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ExplainOptions {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ExplainOptions();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.analyze = reader.readBool();
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): ExplainOptions {
        return ExplainOptions.deserialize(bytes);
    }
}
export class ExplainMetrics extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        plan_summary?: PlanSummary;
        execution_stats?: ExecutionStats;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("plan_summary" in data && data.plan_summary != undefined) {
                this.plan_summary = data.plan_summary;
            }
            if ("execution_stats" in data && data.execution_stats != undefined) {
                this.execution_stats = data.execution_stats;
            }
        }
    }
    get plan_summary() {
        return pb_1.Message.getWrapperField(this, PlanSummary, 1) as PlanSummary;
    }
    set plan_summary(value: PlanSummary) {
        pb_1.Message.setWrapperField(this, 1, value);
    }
    get has_plan_summary() {
        return pb_1.Message.getField(this, 1) != null;
    }
    get execution_stats() {
        return pb_1.Message.getWrapperField(this, ExecutionStats, 2) as ExecutionStats;
    }
    set execution_stats(value: ExecutionStats) {
        pb_1.Message.setWrapperField(this, 2, value);
    }
    get has_execution_stats() {
        return pb_1.Message.getField(this, 2) != null;
    }
    static fromObject(data: {
        plan_summary?: ReturnType<typeof PlanSummary.prototype.toObject>;
        execution_stats?: ReturnType<typeof ExecutionStats.prototype.toObject>;
    }): ExplainMetrics {
        const message = new ExplainMetrics({});
        if (data.plan_summary != null) {
            message.plan_summary = PlanSummary.fromObject(data.plan_summary);
        }
        if (data.execution_stats != null) {
            message.execution_stats = ExecutionStats.fromObject(data.execution_stats);
        }
        return message;
    }
    toObject() {
        const data: {
            plan_summary?: ReturnType<typeof PlanSummary.prototype.toObject>;
            execution_stats?: ReturnType<typeof ExecutionStats.prototype.toObject>;
        } = {};
        if (this.plan_summary != null) {
            data.plan_summary = this.plan_summary.toObject();
        }
        if (this.execution_stats != null) {
            data.execution_stats = this.execution_stats.toObject();
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.has_plan_summary)
            writer.writeMessage(1, this.plan_summary, () => this.plan_summary.serialize(writer));
        if (this.has_execution_stats)
            writer.writeMessage(2, this.execution_stats, () => this.execution_stats.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ExplainMetrics {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ExplainMetrics();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    reader.readMessage(message.plan_summary, () => message.plan_summary = PlanSummary.deserialize(reader));
                    break;
                case 2:
                    reader.readMessage(message.execution_stats, () => message.execution_stats = ExecutionStats.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): ExplainMetrics {
        return ExplainMetrics.deserialize(bytes);
    }
}
export class PlanSummary extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        indexes_used?: dependency_3.Struct[];
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [1], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("indexes_used" in data && data.indexes_used != undefined) {
                this.indexes_used = data.indexes_used;
            }
        }
    }
    get indexes_used() {
        return pb_1.Message.getRepeatedWrapperField(this, dependency_3.Struct, 1) as dependency_3.Struct[];
    }
    set indexes_used(value: dependency_3.Struct[]) {
        pb_1.Message.setRepeatedWrapperField(this, 1, value);
    }
    static fromObject(data: {
        indexes_used?: ReturnType<typeof dependency_3.Struct.prototype.toObject>[];
    }): PlanSummary {
        const message = new PlanSummary({});
        if (data.indexes_used != null) {
            message.indexes_used = data.indexes_used.map(item => dependency_3.Struct.fromObject(item));
        }
        return message;
    }
    toObject() {
        const data: {
            indexes_used?: ReturnType<typeof dependency_3.Struct.prototype.toObject>[];
        } = {};
        if (this.indexes_used != null) {
            data.indexes_used = this.indexes_used.map((item: dependency_3.Struct) => item.toObject());
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.indexes_used.length)
            writer.writeRepeatedMessage(1, this.indexes_used, (item: dependency_3.Struct) => item.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): PlanSummary {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new PlanSummary();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    reader.readMessage(message.indexes_used, () => pb_1.Message.addToRepeatedWrapperField(message, 1, dependency_3.Struct.deserialize(reader), dependency_3.Struct));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): PlanSummary {
        return PlanSummary.deserialize(bytes);
    }
}
export class ExecutionStats extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        results_returned?: number;
        execution_duration?: dependency_2.Duration;
        read_operations?: number;
        debug_stats?: dependency_3.Struct;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("results_returned" in data && data.results_returned != undefined) {
                this.results_returned = data.results_returned;
            }
            if ("execution_duration" in data && data.execution_duration != undefined) {
                this.execution_duration = data.execution_duration;
            }
            if ("read_operations" in data && data.read_operations != undefined) {
                this.read_operations = data.read_operations;
            }
            if ("debug_stats" in data && data.debug_stats != undefined) {
                this.debug_stats = data.debug_stats;
            }
        }
    }
    get results_returned() {
        return pb_1.Message.getFieldWithDefault(this, 1, 0) as number;
    }
    set results_returned(value: number) {
        pb_1.Message.setField(this, 1, value);
    }
    get execution_duration() {
        return pb_1.Message.getWrapperField(this, dependency_2.Duration, 3) as dependency_2.Duration;
    }
    set execution_duration(value: dependency_2.Duration) {
        pb_1.Message.setWrapperField(this, 3, value);
    }
    get has_execution_duration() {
        return pb_1.Message.getField(this, 3) != null;
    }
    get read_operations() {
        return pb_1.Message.getFieldWithDefault(this, 4, 0) as number;
    }
    set read_operations(value: number) {
        pb_1.Message.setField(this, 4, value);
    }
    get debug_stats() {
        return pb_1.Message.getWrapperField(this, dependency_3.Struct, 5) as dependency_3.Struct;
    }
    set debug_stats(value: dependency_3.Struct) {
        pb_1.Message.setWrapperField(this, 5, value);
    }
    get has_debug_stats() {
        return pb_1.Message.getField(this, 5) != null;
    }
    static fromObject(data: {
        results_returned?: number;
        execution_duration?: ReturnType<typeof dependency_2.Duration.prototype.toObject>;
        read_operations?: number;
        debug_stats?: ReturnType<typeof dependency_3.Struct.prototype.toObject>;
    }): ExecutionStats {
        const message = new ExecutionStats({});
        if (data.results_returned != null) {
            message.results_returned = data.results_returned;
        }
        if (data.execution_duration != null) {
            message.execution_duration = dependency_2.Duration.fromObject(data.execution_duration);
        }
        if (data.read_operations != null) {
            message.read_operations = data.read_operations;
        }
        if (data.debug_stats != null) {
            message.debug_stats = dependency_3.Struct.fromObject(data.debug_stats);
        }
        return message;
    }
    toObject() {
        const data: {
            results_returned?: number;
            execution_duration?: ReturnType<typeof dependency_2.Duration.prototype.toObject>;
            read_operations?: number;
            debug_stats?: ReturnType<typeof dependency_3.Struct.prototype.toObject>;
        } = {};
        if (this.results_returned != null) {
            data.results_returned = this.results_returned;
        }
        if (this.execution_duration != null) {
            data.execution_duration = this.execution_duration.toObject();
        }
        if (this.read_operations != null) {
            data.read_operations = this.read_operations;
        }
        if (this.debug_stats != null) {
            data.debug_stats = this.debug_stats.toObject();
        }
        return data;
    }
    serialize(): Uint8Array;
    serialize(w: pb_1.BinaryWriter): void;
    serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
        const writer = w || new pb_1.BinaryWriter();
        if (this.results_returned != 0)
            writer.writeInt64(1, this.results_returned);
        if (this.has_execution_duration)
            writer.writeMessage(3, this.execution_duration, () => this.execution_duration.serialize(writer));
        if (this.read_operations != 0)
            writer.writeInt64(4, this.read_operations);
        if (this.has_debug_stats)
            writer.writeMessage(5, this.debug_stats, () => this.debug_stats.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ExecutionStats {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ExecutionStats();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.results_returned = reader.readInt64();
                    break;
                case 3:
                    reader.readMessage(message.execution_duration, () => message.execution_duration = dependency_2.Duration.deserialize(reader));
                    break;
                case 4:
                    message.read_operations = reader.readInt64();
                    break;
                case 5:
                    reader.readMessage(message.debug_stats, () => message.debug_stats = dependency_3.Struct.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): ExecutionStats {
        return ExecutionStats.deserialize(bytes);
    }
}
