import _m0 from 'protobufjs/minimal';
import { TimeOfDay } from '../../../../google/type/timeofday';
import { Duration } from '../../../../google/protobuf/duration';
import { DayOfWeek } from '../../../../google/type/dayofweek';
export declare const protobufPackage = "yandex.cloud.k8s.v1";
export interface MaintenanceWindow {
    /** Updating the master at any time. */
    anytime?: AnytimeMaintenanceWindow | undefined;
    /** Updating the master on any day during the specified time window. */
    dailyMaintenanceWindow?: DailyMaintenanceWindow | undefined;
    /** Updating the master on selected days during the specified time window. */
    weeklyMaintenanceWindow?: WeeklyMaintenanceWindow | undefined;
}
export interface AnytimeMaintenanceWindow {
}
export interface DailyMaintenanceWindow {
    /** Window start time, in the UTC timezone. */
    startTime?: TimeOfDay;
    /** Window duration. */
    duration?: Duration;
}
export interface DaysOfWeekMaintenanceWindow {
    /** Days of the week when automatic updates are allowed. */
    days: DayOfWeek[];
    /** Window start time, in the UTC timezone. */
    startTime?: TimeOfDay;
    /** Window duration. */
    duration?: Duration;
}
export interface WeeklyMaintenanceWindow {
    /** Days of the week and the maintenance window for these days when automatic updates are allowed. */
    daysOfWeek: DaysOfWeekMaintenanceWindow[];
}
export interface ScheduledMaintenance {
    /** Time until which the update should be postponed. */
    delayedUntil?: Date;
    /** Time when the update became available. */
    availableFrom?: Date;
    /** The latest possible date by which a mandatory update must be applied. */
    noLaterThan?: Date;
    /** Description of the planned operation, for example, "Infrastructure planned update". */
    description: string;
}
export declare const MaintenanceWindow: {
    encode(message: MaintenanceWindow, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): MaintenanceWindow;
    fromJSON(object: any): MaintenanceWindow;
    toJSON(message: MaintenanceWindow): unknown;
    fromPartial<I extends {
        anytime?: {} | undefined;
        dailyMaintenanceWindow?: {
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        } | undefined;
        weeklyMaintenanceWindow?: {
            daysOfWeek?: {
                days?: DayOfWeek[] | undefined;
                startTime?: {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
                duration?: {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
            }[] | undefined;
        } | undefined;
    } & {
        anytime?: ({} & {} & Record<Exclude<keyof I["anytime"], never>, never>) | undefined;
        dailyMaintenanceWindow?: ({
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        } & {
            startTime?: ({
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & Record<Exclude<keyof I["dailyMaintenanceWindow"]["startTime"], keyof TimeOfDay>, never>) | undefined;
            duration?: ({
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & Record<Exclude<keyof I["dailyMaintenanceWindow"]["duration"], keyof Duration>, never>) | undefined;
        } & Record<Exclude<keyof I["dailyMaintenanceWindow"], keyof DailyMaintenanceWindow>, never>) | undefined;
        weeklyMaintenanceWindow?: ({
            daysOfWeek?: {
                days?: DayOfWeek[] | undefined;
                startTime?: {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
                duration?: {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
            }[] | undefined;
        } & {
            daysOfWeek?: ({
                days?: DayOfWeek[] | undefined;
                startTime?: {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
                duration?: {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
            }[] & ({
                days?: DayOfWeek[] | undefined;
                startTime?: {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
                duration?: {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
            } & {
                days?: (DayOfWeek[] & DayOfWeek[] & Record<Exclude<keyof I["weeklyMaintenanceWindow"]["daysOfWeek"][number]["days"], keyof DayOfWeek[]>, never>) | undefined;
                startTime?: ({
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } & {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } & Record<Exclude<keyof I["weeklyMaintenanceWindow"]["daysOfWeek"][number]["startTime"], keyof TimeOfDay>, never>) | undefined;
                duration?: ({
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } & {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } & Record<Exclude<keyof I["weeklyMaintenanceWindow"]["daysOfWeek"][number]["duration"], keyof Duration>, never>) | undefined;
            } & Record<Exclude<keyof I["weeklyMaintenanceWindow"]["daysOfWeek"][number], keyof DaysOfWeekMaintenanceWindow>, never>)[] & Record<Exclude<keyof I["weeklyMaintenanceWindow"]["daysOfWeek"], keyof {
                days?: DayOfWeek[] | undefined;
                startTime?: {
                    hours?: number | undefined;
                    minutes?: number | undefined;
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
                duration?: {
                    seconds?: number | undefined;
                    nanos?: number | undefined;
                } | undefined;
            }[]>, never>) | undefined;
        } & Record<Exclude<keyof I["weeklyMaintenanceWindow"], "daysOfWeek">, never>) | undefined;
    } & Record<Exclude<keyof I, keyof MaintenanceWindow>, never>>(object: I): MaintenanceWindow;
};
export declare const AnytimeMaintenanceWindow: {
    encode(_: AnytimeMaintenanceWindow, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): AnytimeMaintenanceWindow;
    fromJSON(_: any): AnytimeMaintenanceWindow;
    toJSON(_: AnytimeMaintenanceWindow): unknown;
    fromPartial<I extends {} & {} & Record<Exclude<keyof I, never>, never>>(_: I): AnytimeMaintenanceWindow;
};
export declare const DailyMaintenanceWindow: {
    encode(message: DailyMaintenanceWindow, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): DailyMaintenanceWindow;
    fromJSON(object: any): DailyMaintenanceWindow;
    toJSON(message: DailyMaintenanceWindow): unknown;
    fromPartial<I extends {
        startTime?: {
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } | undefined;
        duration?: {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } | undefined;
    } & {
        startTime?: ({
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & {
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & Record<Exclude<keyof I["startTime"], keyof TimeOfDay>, never>) | undefined;
        duration?: ({
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & Record<Exclude<keyof I["duration"], keyof Duration>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof DailyMaintenanceWindow>, never>>(object: I): DailyMaintenanceWindow;
};
export declare const DaysOfWeekMaintenanceWindow: {
    encode(message: DaysOfWeekMaintenanceWindow, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): DaysOfWeekMaintenanceWindow;
    fromJSON(object: any): DaysOfWeekMaintenanceWindow;
    toJSON(message: DaysOfWeekMaintenanceWindow): unknown;
    fromPartial<I extends {
        days?: DayOfWeek[] | undefined;
        startTime?: {
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } | undefined;
        duration?: {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } | undefined;
    } & {
        days?: (DayOfWeek[] & DayOfWeek[] & Record<Exclude<keyof I["days"], keyof DayOfWeek[]>, never>) | undefined;
        startTime?: ({
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & {
            hours?: number | undefined;
            minutes?: number | undefined;
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & Record<Exclude<keyof I["startTime"], keyof TimeOfDay>, never>) | undefined;
        duration?: ({
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & Record<Exclude<keyof I["duration"], keyof Duration>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof DaysOfWeekMaintenanceWindow>, never>>(object: I): DaysOfWeekMaintenanceWindow;
};
export declare const WeeklyMaintenanceWindow: {
    encode(message: WeeklyMaintenanceWindow, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): WeeklyMaintenanceWindow;
    fromJSON(object: any): WeeklyMaintenanceWindow;
    toJSON(message: WeeklyMaintenanceWindow): unknown;
    fromPartial<I extends {
        daysOfWeek?: {
            days?: DayOfWeek[] | undefined;
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        }[] | undefined;
    } & {
        daysOfWeek?: ({
            days?: DayOfWeek[] | undefined;
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        }[] & ({
            days?: DayOfWeek[] | undefined;
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        } & {
            days?: (DayOfWeek[] & DayOfWeek[] & Record<Exclude<keyof I["daysOfWeek"][number]["days"], keyof DayOfWeek[]>, never>) | undefined;
            startTime?: ({
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & Record<Exclude<keyof I["daysOfWeek"][number]["startTime"], keyof TimeOfDay>, never>) | undefined;
            duration?: ({
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } & Record<Exclude<keyof I["daysOfWeek"][number]["duration"], keyof Duration>, never>) | undefined;
        } & Record<Exclude<keyof I["daysOfWeek"][number], keyof DaysOfWeekMaintenanceWindow>, never>)[] & Record<Exclude<keyof I["daysOfWeek"], keyof {
            days?: DayOfWeek[] | undefined;
            startTime?: {
                hours?: number | undefined;
                minutes?: number | undefined;
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
            duration?: {
                seconds?: number | undefined;
                nanos?: number | undefined;
            } | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, "daysOfWeek">, never>>(object: I): WeeklyMaintenanceWindow;
};
export declare const ScheduledMaintenance: {
    encode(message: ScheduledMaintenance, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): ScheduledMaintenance;
    fromJSON(object: any): ScheduledMaintenance;
    toJSON(message: ScheduledMaintenance): unknown;
    fromPartial<I extends {
        delayedUntil?: Date | undefined;
        availableFrom?: Date | undefined;
        noLaterThan?: Date | undefined;
        description?: string | undefined;
    } & {
        delayedUntil?: Date | undefined;
        availableFrom?: Date | undefined;
        noLaterThan?: Date | undefined;
        description?: string | undefined;
    } & Record<Exclude<keyof I, keyof ScheduledMaintenance>, never>>(object: I): ScheduledMaintenance;
};
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in keyof T]?: DeepPartial<T[K]>;
} : Partial<T>;
type KeysOfUnion<T> = T extends T ? keyof T : never;
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
    [K in keyof P]: Exact<P[K], I[K]>;
} & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;
export {};
