import * as $protobuf from "protobufjs";
import Long = require("long");
/** Namespace todo. */
export namespace todo {

    /** Properties of an Inner. */
    interface IInner {

        /** Inner value */
        value?: (number|null);
    }

    /** Represents an Inner. */
    class Inner implements IInner {

        /**
         * Constructs a new Inner.
         * @param [properties] Properties to set
         */
        constructor(properties?: todo.IInner);

        /** Inner value. */
        public value: number;

        /**
         * Creates a new Inner instance using the specified properties.
         * @param [properties] Properties to set
         * @returns Inner instance
         */
        public static create(properties?: todo.IInner): todo.Inner;

        /**
         * Encodes the specified Inner message. Does not implicitly {@link todo.Inner.verify|verify} messages.
         * @param message Inner message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: todo.IInner, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified Inner message, length delimited. Does not implicitly {@link todo.Inner.verify|verify} messages.
         * @param message Inner message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: todo.IInner, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an Inner message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Inner
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): todo.Inner;

        /**
         * Decodes an Inner message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns Inner
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): todo.Inner;

        /**
         * Verifies an Inner message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an Inner message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Inner
         */
        public static fromObject(object: { [k: string]: any }): todo.Inner;

        /**
         * Creates a plain object from an Inner message. Also converts values to other types if specified.
         * @param message Inner
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: todo.Inner, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Inner to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for Inner
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }

    /** Properties of a MyMessage. */
    interface IMyMessage {

        /** MyMessage inner */
        inner?: (todo.IInner|null);

        /** MyMessage value */
        value?: (number|null);
    }

    /** Represents a MyMessage. */
    class MyMessage implements IMyMessage {

        /**
         * Constructs a new MyMessage.
         * @param [properties] Properties to set
         */
        constructor(properties?: todo.IMyMessage);

        /** MyMessage inner. */
        public inner?: (todo.IInner|null);

        /** MyMessage value. */
        public value: number;

        /**
         * Creates a new MyMessage instance using the specified properties.
         * @param [properties] Properties to set
         * @returns MyMessage instance
         */
        public static create(properties?: todo.IMyMessage): todo.MyMessage;

        /**
         * Encodes the specified MyMessage message. Does not implicitly {@link todo.MyMessage.verify|verify} messages.
         * @param message MyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: todo.IMyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Encodes the specified MyMessage message, length delimited. Does not implicitly {@link todo.MyMessage.verify|verify} messages.
         * @param message MyMessage message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encodeDelimited(message: todo.IMyMessage, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a MyMessage message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns MyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): todo.MyMessage;

        /**
         * Decodes a MyMessage message from the specified reader or buffer, length delimited.
         * @param reader Reader or buffer to decode from
         * @returns MyMessage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): todo.MyMessage;

        /**
         * Verifies a MyMessage message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a MyMessage message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns MyMessage
         */
        public static fromObject(object: { [k: string]: any }): todo.MyMessage;

        /**
         * Creates a plain object from a MyMessage message. Also converts values to other types if specified.
         * @param message MyMessage
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: todo.MyMessage, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this MyMessage to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };

        /**
         * Gets the default type url for MyMessage
         * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
         * @returns The default type url
         */
        public static getTypeUrl(typeUrlPrefix?: string): string;
    }
}