/**
 * Generated by the protoc-gen-ts.  DO NOT EDIT!
 * compiler version: 3.19.1
 * source: google/firestore/v1/document.proto
 * git: https://github.com/thesayyn/protoc-gen-ts */
import * as dependency_1 from "./../../api/field_behavior";
import * as dependency_2 from "./../../protobuf/struct";
import * as dependency_3 from "./../../protobuf/timestamp";
import * as dependency_4 from "./../../type/latlng";
import * as pb_1 from "google-protobuf";
export class Document extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        name?: string;
        fields?: Map<string, Value>;
        create_time?: dependency_3.Timestamp;
        update_time?: dependency_3.Timestamp;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("name" in data && data.name != undefined) {
                this.name = data.name;
            }
            if ("fields" in data && data.fields != undefined) {
                this.fields = data.fields;
            }
            if ("create_time" in data && data.create_time != undefined) {
                this.create_time = data.create_time;
            }
            if ("update_time" in data && data.update_time != undefined) {
                this.update_time = data.update_time;
            }
        }
        if (!this.fields)
            this.fields = new Map();
    }
    get name() {
        return pb_1.Message.getFieldWithDefault(this, 1, "") as string;
    }
    set name(value: string) {
        pb_1.Message.setField(this, 1, value);
    }
    get fields() {
        return pb_1.Message.getField(this, 2) as any as Map<string, Value>;
    }
    set fields(value: Map<string, Value>) {
        pb_1.Message.setField(this, 2, value as any);
    }
    get create_time() {
        return pb_1.Message.getWrapperField(this, dependency_3.Timestamp, 3) as dependency_3.Timestamp;
    }
    set create_time(value: dependency_3.Timestamp) {
        pb_1.Message.setWrapperField(this, 3, value);
    }
    get has_create_time() {
        return pb_1.Message.getField(this, 3) != null;
    }
    get update_time() {
        return pb_1.Message.getWrapperField(this, dependency_3.Timestamp, 4) as dependency_3.Timestamp;
    }
    set update_time(value: dependency_3.Timestamp) {
        pb_1.Message.setWrapperField(this, 4, value);
    }
    get has_update_time() {
        return pb_1.Message.getField(this, 4) != null;
    }
    static fromObject(data: {
        name?: string;
        fields?: {
            [key: string]: ReturnType<typeof Value.prototype.toObject>;
        };
        create_time?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
        update_time?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
    }): Document {
        const message = new Document({});
        if (data.name != null) {
            message.name = data.name;
        }
        if (typeof data.fields == "object") {
            message.fields = new Map(Object.entries(data.fields).map(([key, value]) => [key, Value.fromObject(value)]));
        }
        if (data.create_time != null) {
            message.create_time = dependency_3.Timestamp.fromObject(data.create_time);
        }
        if (data.update_time != null) {
            message.update_time = dependency_3.Timestamp.fromObject(data.update_time);
        }
        return message;
    }
    toObject() {
        const data: {
            name?: string;
            fields?: {
                [key: string]: ReturnType<typeof Value.prototype.toObject>;
            };
            create_time?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
            update_time?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
        } = {};
        if (this.name != null) {
            data.name = this.name;
        }
        if (this.fields != null) {
            data.fields = (Object.fromEntries)((Array.from)(this.fields).map(([key, value]) => [key, value.toObject()]));
        }
        if (this.create_time != null) {
            data.create_time = this.create_time.toObject();
        }
        if (this.update_time != null) {
            data.update_time = this.update_time.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.name.length)
            writer.writeString(1, this.name);
        for (const [key, value] of this.fields) {
            writer.writeMessage(2, this.fields, () => {
                writer.writeString(1, key);
                writer.writeMessage(2, value, () => value.serialize(writer));
            });
        }
        if (this.has_create_time)
            writer.writeMessage(3, this.create_time, () => this.create_time.serialize(writer));
        if (this.has_update_time)
            writer.writeMessage(4, this.update_time, () => this.update_time.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Document {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Document();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    message.name = reader.readString();
                    break;
                case 2:
                    reader.readMessage(message, () => pb_1.Map.deserializeBinary(message.fields as any, reader, reader.readString, () => {
                        let value;
                        reader.readMessage(message, () => value = Value.deserialize(reader));
                        return value;
                    }));
                    break;
                case 3:
                    reader.readMessage(message.create_time, () => message.create_time = dependency_3.Timestamp.deserialize(reader));
                    break;
                case 4:
                    reader.readMessage(message.update_time, () => message.update_time = dependency_3.Timestamp.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): Document {
        return Document.deserialize(bytes);
    }
}
export class Value extends pb_1.Message {
    #one_of_decls: number[][] = [[11, 1, 2, 3, 10, 17, 18, 5, 8, 9, 6]];
    constructor(data?: any[] | ({} & (({
        null_value?: dependency_2.NullValue;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: boolean;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: number;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: number;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: dependency_3.Timestamp;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: string;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: Uint8Array;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: string;
        geo_point_value?: never;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: dependency_4.LatLng;
        array_value?: never;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: ArrayValue;
        map_value?: never;
    } | {
        null_value?: never;
        boolean_value?: never;
        integer_value?: never;
        double_value?: never;
        timestamp_value?: never;
        string_value?: never;
        bytes_value?: never;
        reference_value?: never;
        geo_point_value?: never;
        array_value?: never;
        map_value?: MapValue;
    })))) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("null_value" in data && data.null_value != undefined) {
                this.null_value = data.null_value;
            }
            if ("boolean_value" in data && data.boolean_value != undefined) {
                this.boolean_value = data.boolean_value;
            }
            if ("integer_value" in data && data.integer_value != undefined) {
                this.integer_value = data.integer_value;
            }
            if ("double_value" in data && data.double_value != undefined) {
                this.double_value = data.double_value;
            }
            if ("timestamp_value" in data && data.timestamp_value != undefined) {
                this.timestamp_value = data.timestamp_value;
            }
            if ("string_value" in data && data.string_value != undefined) {
                this.string_value = data.string_value;
            }
            if ("bytes_value" in data && data.bytes_value != undefined) {
                this.bytes_value = data.bytes_value;
            }
            if ("reference_value" in data && data.reference_value != undefined) {
                this.reference_value = data.reference_value;
            }
            if ("geo_point_value" in data && data.geo_point_value != undefined) {
                this.geo_point_value = data.geo_point_value;
            }
            if ("array_value" in data && data.array_value != undefined) {
                this.array_value = data.array_value;
            }
            if ("map_value" in data && data.map_value != undefined) {
                this.map_value = data.map_value;
            }
        }
    }
    get null_value() {
        return pb_1.Message.getFieldWithDefault(this, 11, dependency_2.NullValue.NULL_VALUE) as dependency_2.NullValue;
    }
    set null_value(value: dependency_2.NullValue) {
        pb_1.Message.setOneofField(this, 11, this.#one_of_decls[0], value);
    }
    get has_null_value() {
        return pb_1.Message.getField(this, 11) != null;
    }
    get boolean_value() {
        return pb_1.Message.getFieldWithDefault(this, 1, false) as boolean;
    }
    set boolean_value(value: boolean) {
        pb_1.Message.setOneofField(this, 1, this.#one_of_decls[0], value);
    }
    get has_boolean_value() {
        return pb_1.Message.getField(this, 1) != null;
    }
    get integer_value() {
        return pb_1.Message.getFieldWithDefault(this, 2, 0) as number;
    }
    set integer_value(value: number) {
        pb_1.Message.setOneofField(this, 2, this.#one_of_decls[0], value);
    }
    get has_integer_value() {
        return pb_1.Message.getField(this, 2) != null;
    }
    get double_value() {
        return pb_1.Message.getFieldWithDefault(this, 3, 0) as number;
    }
    set double_value(value: number) {
        pb_1.Message.setOneofField(this, 3, this.#one_of_decls[0], value);
    }
    get has_double_value() {
        return pb_1.Message.getField(this, 3) != null;
    }
    get timestamp_value() {
        return pb_1.Message.getWrapperField(this, dependency_3.Timestamp, 10) as dependency_3.Timestamp;
    }
    set timestamp_value(value: dependency_3.Timestamp) {
        pb_1.Message.setOneofWrapperField(this, 10, this.#one_of_decls[0], value);
    }
    get has_timestamp_value() {
        return pb_1.Message.getField(this, 10) != null;
    }
    get string_value() {
        return pb_1.Message.getFieldWithDefault(this, 17, "") as string;
    }
    set string_value(value: string) {
        pb_1.Message.setOneofField(this, 17, this.#one_of_decls[0], value);
    }
    get has_string_value() {
        return pb_1.Message.getField(this, 17) != null;
    }
    get bytes_value() {
        return pb_1.Message.getFieldWithDefault(this, 18, new Uint8Array(0)) as Uint8Array;
    }
    set bytes_value(value: Uint8Array) {
        pb_1.Message.setOneofField(this, 18, this.#one_of_decls[0], value);
    }
    get has_bytes_value() {
        return pb_1.Message.getField(this, 18) != null;
    }
    get reference_value() {
        return pb_1.Message.getFieldWithDefault(this, 5, "") as string;
    }
    set reference_value(value: string) {
        pb_1.Message.setOneofField(this, 5, this.#one_of_decls[0], value);
    }
    get has_reference_value() {
        return pb_1.Message.getField(this, 5) != null;
    }
    get geo_point_value() {
        return pb_1.Message.getWrapperField(this, dependency_4.LatLng, 8) as dependency_4.LatLng;
    }
    set geo_point_value(value: dependency_4.LatLng) {
        pb_1.Message.setOneofWrapperField(this, 8, this.#one_of_decls[0], value);
    }
    get has_geo_point_value() {
        return pb_1.Message.getField(this, 8) != null;
    }
    get array_value() {
        return pb_1.Message.getWrapperField(this, ArrayValue, 9) as ArrayValue;
    }
    set array_value(value: ArrayValue) {
        pb_1.Message.setOneofWrapperField(this, 9, this.#one_of_decls[0], value);
    }
    get has_array_value() {
        return pb_1.Message.getField(this, 9) != null;
    }
    get map_value() {
        return pb_1.Message.getWrapperField(this, MapValue, 6) as MapValue;
    }
    set map_value(value: MapValue) {
        pb_1.Message.setOneofWrapperField(this, 6, this.#one_of_decls[0], value);
    }
    get has_map_value() {
        return pb_1.Message.getField(this, 6) != null;
    }
    get value_type() {
        const cases: {
            [index: number]: "none" | "null_value" | "boolean_value" | "integer_value" | "double_value" | "timestamp_value" | "string_value" | "bytes_value" | "reference_value" | "geo_point_value" | "array_value" | "map_value";
        } = {
            0: "none",
            11: "null_value",
            1: "boolean_value",
            2: "integer_value",
            3: "double_value",
            10: "timestamp_value",
            17: "string_value",
            18: "bytes_value",
            5: "reference_value",
            8: "geo_point_value",
            9: "array_value",
            6: "map_value"
        };
        return cases[pb_1.Message.computeOneofCase(this, [11, 1, 2, 3, 10, 17, 18, 5, 8, 9, 6])];
    }
    static fromObject(data: {
        null_value?: dependency_2.NullValue;
        boolean_value?: boolean;
        integer_value?: number;
        double_value?: number;
        timestamp_value?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
        string_value?: string;
        bytes_value?: Uint8Array;
        reference_value?: string;
        geo_point_value?: ReturnType<typeof dependency_4.LatLng.prototype.toObject>;
        array_value?: ReturnType<typeof ArrayValue.prototype.toObject>;
        map_value?: ReturnType<typeof MapValue.prototype.toObject>;
    }): Value {
        const message = new Value({});
        if (data.null_value != null) {
            message.null_value = data.null_value;
        }
        if (data.boolean_value != null) {
            message.boolean_value = data.boolean_value;
        }
        if (data.integer_value != null) {
            message.integer_value = data.integer_value;
        }
        if (data.double_value != null) {
            message.double_value = data.double_value;
        }
        if (data.timestamp_value != null) {
            message.timestamp_value = dependency_3.Timestamp.fromObject(data.timestamp_value);
        }
        if (data.string_value != null) {
            message.string_value = data.string_value;
        }
        if (data.bytes_value != null) {
            message.bytes_value = data.bytes_value;
        }
        if (data.reference_value != null) {
            message.reference_value = data.reference_value;
        }
        if (data.geo_point_value != null) {
            message.geo_point_value = dependency_4.LatLng.fromObject(data.geo_point_value);
        }
        if (data.array_value != null) {
            message.array_value = ArrayValue.fromObject(data.array_value);
        }
        if (data.map_value != null) {
            message.map_value = MapValue.fromObject(data.map_value);
        }
        return message;
    }
    toObject() {
        const data: {
            null_value?: dependency_2.NullValue;
            boolean_value?: boolean;
            integer_value?: number;
            double_value?: number;
            timestamp_value?: ReturnType<typeof dependency_3.Timestamp.prototype.toObject>;
            string_value?: string;
            bytes_value?: Uint8Array;
            reference_value?: string;
            geo_point_value?: ReturnType<typeof dependency_4.LatLng.prototype.toObject>;
            array_value?: ReturnType<typeof ArrayValue.prototype.toObject>;
            map_value?: ReturnType<typeof MapValue.prototype.toObject>;
        } = {};
        if (this.null_value != null) {
            data.null_value = this.null_value;
        }
        if (this.boolean_value != null) {
            data.boolean_value = this.boolean_value;
        }
        if (this.integer_value != null) {
            data.integer_value = this.integer_value;
        }
        if (this.double_value != null) {
            data.double_value = this.double_value;
        }
        if (this.timestamp_value != null) {
            data.timestamp_value = this.timestamp_value.toObject();
        }
        if (this.string_value != null) {
            data.string_value = this.string_value;
        }
        if (this.bytes_value != null) {
            data.bytes_value = this.bytes_value;
        }
        if (this.reference_value != null) {
            data.reference_value = this.reference_value;
        }
        if (this.geo_point_value != null) {
            data.geo_point_value = this.geo_point_value.toObject();
        }
        if (this.array_value != null) {
            data.array_value = this.array_value.toObject();
        }
        if (this.map_value != null) {
            data.map_value = this.map_value.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_null_value)
            writer.writeEnum(11, this.null_value);
        if (this.has_boolean_value)
            writer.writeBool(1, this.boolean_value);
        if (this.has_integer_value)
            writer.writeInt64(2, this.integer_value);
        if (this.has_double_value)
            writer.writeDouble(3, this.double_value);
        if (this.has_timestamp_value)
            writer.writeMessage(10, this.timestamp_value, () => this.timestamp_value.serialize(writer));
        if (this.has_string_value)
            writer.writeString(17, this.string_value);
        if (this.has_bytes_value)
            writer.writeBytes(18, this.bytes_value);
        if (this.has_reference_value)
            writer.writeString(5, this.reference_value);
        if (this.has_geo_point_value)
            writer.writeMessage(8, this.geo_point_value, () => this.geo_point_value.serialize(writer));
        if (this.has_array_value)
            writer.writeMessage(9, this.array_value, () => this.array_value.serialize(writer));
        if (this.has_map_value)
            writer.writeMessage(6, this.map_value, () => this.map_value.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): Value {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new Value();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 11:
                    message.null_value = reader.readEnum();
                    break;
                case 1:
                    message.boolean_value = reader.readBool();
                    break;
                case 2:
                    message.integer_value = reader.readInt64();
                    break;
                case 3:
                    message.double_value = reader.readDouble();
                    break;
                case 10:
                    reader.readMessage(message.timestamp_value, () => message.timestamp_value = dependency_3.Timestamp.deserialize(reader));
                    break;
                case 17:
                    message.string_value = reader.readString();
                    break;
                case 18:
                    message.bytes_value = reader.readBytes();
                    break;
                case 5:
                    message.reference_value = reader.readString();
                    break;
                case 8:
                    reader.readMessage(message.geo_point_value, () => message.geo_point_value = dependency_4.LatLng.deserialize(reader));
                    break;
                case 9:
                    reader.readMessage(message.array_value, () => message.array_value = ArrayValue.deserialize(reader));
                    break;
                case 6:
                    reader.readMessage(message.map_value, () => message.map_value = MapValue.deserialize(reader));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): Value {
        return Value.deserialize(bytes);
    }
}
export class ArrayValue extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        values?: Value[];
    }) {
        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 ("values" in data && data.values != undefined) {
                this.values = data.values;
            }
        }
    }
    get values() {
        return pb_1.Message.getRepeatedWrapperField(this, Value, 1) as Value[];
    }
    set values(value: Value[]) {
        pb_1.Message.setRepeatedWrapperField(this, 1, value);
    }
    static fromObject(data: {
        values?: ReturnType<typeof Value.prototype.toObject>[];
    }): ArrayValue {
        const message = new ArrayValue({});
        if (data.values != null) {
            message.values = data.values.map(item => Value.fromObject(item));
        }
        return message;
    }
    toObject() {
        const data: {
            values?: ReturnType<typeof Value.prototype.toObject>[];
        } = {};
        if (this.values != null) {
            data.values = this.values.map((item: Value) => 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.values.length)
            writer.writeRepeatedMessage(1, this.values, (item: Value) => item.serialize(writer));
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): ArrayValue {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new ArrayValue();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    reader.readMessage(message.values, () => pb_1.Message.addToRepeatedWrapperField(message, 1, Value.deserialize(reader), Value));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): ArrayValue {
        return ArrayValue.deserialize(bytes);
    }
}
export class MapValue extends pb_1.Message {
    #one_of_decls: number[][] = [];
    constructor(data?: any[] | {
        fields?: Map<string, Value>;
    }) {
        super();
        pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
        if (!Array.isArray(data) && typeof data == "object") {
            if ("fields" in data && data.fields != undefined) {
                this.fields = data.fields;
            }
        }
        if (!this.fields)
            this.fields = new Map();
    }
    get fields() {
        return pb_1.Message.getField(this, 1) as any as Map<string, Value>;
    }
    set fields(value: Map<string, Value>) {
        pb_1.Message.setField(this, 1, value as any);
    }
    static fromObject(data: {
        fields?: {
            [key: string]: ReturnType<typeof Value.prototype.toObject>;
        };
    }): MapValue {
        const message = new MapValue({});
        if (typeof data.fields == "object") {
            message.fields = new Map(Object.entries(data.fields).map(([key, value]) => [key, Value.fromObject(value)]));
        }
        return message;
    }
    toObject() {
        const data: {
            fields?: {
                [key: string]: ReturnType<typeof Value.prototype.toObject>;
            };
        } = {};
        if (this.fields != null) {
            data.fields = (Object.fromEntries)((Array.from)(this.fields).map(([key, value]) => [key, value.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();
        for (const [key, value] of this.fields) {
            writer.writeMessage(1, this.fields, () => {
                writer.writeString(1, key);
                writer.writeMessage(2, value, () => value.serialize(writer));
            });
        }
        if (!w)
            return writer.getResultBuffer();
    }
    static deserialize(bytes: Uint8Array | pb_1.BinaryReader): MapValue {
        const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new MapValue();
        while (reader.nextField()) {
            if (reader.isEndGroup())
                break;
            switch (reader.getFieldNumber()) {
                case 1:
                    reader.readMessage(message, () => pb_1.Map.deserializeBinary(message.fields as any, reader, reader.readString, () => {
                        let value;
                        reader.readMessage(message, () => value = Value.deserialize(reader));
                        return value;
                    }));
                    break;
                default: reader.skipField();
            }
        }
        return message;
    }
    serializeBinary(): Uint8Array {
        return this.serialize();
    }
    static override deserializeBinary(bytes: Uint8Array): MapValue {
        return MapValue.deserialize(bytes);
    }
}
