import _m0 from 'protobufjs/minimal';
import { Duration } from '../../../../google/protobuf/duration';
export declare const protobufPackage = "yandex.cloud.compute.v1";
/** A snapshot schedule. For details about the concept, see [documentation](/docs/compute/concepts/snapshot-schedule). */
export interface SnapshotSchedule {
    /** ID of the snapshot schedule. */
    id: string;
    /** ID of the folder that the snapshot schedule belongs to. */
    folderId: string;
    /** Creation timestamp. */
    createdAt?: Date;
    /**
     * Name of the snapshot schedule.
     *
     * The name is unique within the folder.
     */
    name: string;
    /** Description of the snapshot schedule. */
    description: string;
    /** Snapshot schedule labels as `key:value` pairs. */
    labels: {
        [key: string]: string;
    };
    /** Status of the snapshot schedule. */
    status: SnapshotSchedule_Status;
    /** Frequency settings of the snapshot schedule. */
    schedulePolicy?: SchedulePolicy;
    /**
     * Retention period of the snapshot schedule. Once a snapshot created by the schedule reaches this age, it is
     * automatically deleted.
     */
    retentionPeriod?: Duration | undefined;
    /**
     * Retention count of the snapshot schedule. Once the number of snapshots created by the schedule exceeds this
     * number, the oldest ones are automatically deleted. E.g. if the number is 5, the first snapshot is deleted
     * after the sixth one is created, the second is deleted after the seventh one is created, and so on.
     */
    snapshotCount: number | undefined;
    /** Attributes of snapshots created by the snapshot schedule. */
    snapshotSpec?: SnapshotSpec;
}
export declare enum SnapshotSchedule_Status {
    STATUS_UNSPECIFIED = 0,
    /** CREATING - The snapshot schedule is being created. */
    CREATING = 1,
    /**
     * ACTIVE - The snapshot schedule is on: new disk snapshots will be created, old ones deleted
     * (if [SnapshotSchedule.retention_policy] is specified).
     */
    ACTIVE = 2,
    /** INACTIVE - The schedule is interrupted, snapshots won't be created or deleted. */
    INACTIVE = 3,
    /** DELETING - The schedule is being deleted. */
    DELETING = 4,
    /** UPDATING - Changes are being made to snapshot schedule settings or a list of attached disks. */
    UPDATING = 5,
    UNRECOGNIZED = -1
}
export declare function snapshotSchedule_StatusFromJSON(object: any): SnapshotSchedule_Status;
export declare function snapshotSchedule_StatusToJSON(object: SnapshotSchedule_Status): string;
export interface SnapshotSchedule_LabelsEntry {
    key: string;
    value: string;
}
/** A resource for frequency settings of a snapshot schedule. */
export interface SchedulePolicy {
    /** Timestamp for creating the first snapshot. */
    startAt?: Date;
    /**
     * Cron expression for the snapshot schedule (UTC+0).
     *
     * The expression must consist of five fields (`Minutes Hours Day-of-month Month Day-of-week`) or be one of
     * nonstandard predefined expressions (e.g. `@hourly`). For details about the format,
     * see [documentation](/docs/compute/concepts/snapshot-schedule#cron)
     */
    expression: string;
}
/** A resource for attributes of snapshots created by the snapshot schedule. */
export interface SnapshotSpec {
    /** Description of the created snapshot. */
    description: string;
    /** Snapshot labels as `key:value` pairs. */
    labels: {
        [key: string]: string;
    };
}
export interface SnapshotSpec_LabelsEntry {
    key: string;
    value: string;
}
export declare const SnapshotSchedule: {
    encode(message: SnapshotSchedule, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SnapshotSchedule;
    fromJSON(object: any): SnapshotSchedule;
    toJSON(message: SnapshotSchedule): unknown;
    fromPartial<I extends {
        id?: string | undefined;
        folderId?: string | undefined;
        createdAt?: Date | undefined;
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            [x: string]: string | undefined;
        } | undefined;
        status?: SnapshotSchedule_Status | undefined;
        schedulePolicy?: {
            startAt?: Date | undefined;
            expression?: string | undefined;
        } | undefined;
        retentionPeriod?: {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } | undefined;
        snapshotCount?: number | undefined;
        snapshotSpec?: {
            description?: string | undefined;
            labels?: {
                [x: string]: string | undefined;
            } | undefined;
        } | undefined;
    } & {
        id?: string | undefined;
        folderId?: string | undefined;
        createdAt?: Date | undefined;
        name?: string | undefined;
        description?: string | undefined;
        labels?: ({
            [x: string]: string | undefined;
        } & {
            [x: string]: string | undefined;
        } & Record<Exclude<keyof I["labels"], string | number>, never>) | undefined;
        status?: SnapshotSchedule_Status | undefined;
        schedulePolicy?: ({
            startAt?: Date | undefined;
            expression?: string | undefined;
        } & {
            startAt?: Date | undefined;
            expression?: string | undefined;
        } & Record<Exclude<keyof I["schedulePolicy"], keyof SchedulePolicy>, never>) | undefined;
        retentionPeriod?: ({
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & {
            seconds?: number | undefined;
            nanos?: number | undefined;
        } & Record<Exclude<keyof I["retentionPeriod"], keyof Duration>, never>) | undefined;
        snapshotCount?: number | undefined;
        snapshotSpec?: ({
            description?: string | undefined;
            labels?: {
                [x: string]: string | undefined;
            } | undefined;
        } & {
            description?: string | undefined;
            labels?: ({
                [x: string]: string | undefined;
            } & {
                [x: string]: string | undefined;
            } & Record<Exclude<keyof I["snapshotSpec"]["labels"], string | number>, never>) | undefined;
        } & Record<Exclude<keyof I["snapshotSpec"], keyof SnapshotSpec>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof SnapshotSchedule>, never>>(object: I): SnapshotSchedule;
};
export declare const SnapshotSchedule_LabelsEntry: {
    encode(message: SnapshotSchedule_LabelsEntry, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SnapshotSchedule_LabelsEntry;
    fromJSON(object: any): SnapshotSchedule_LabelsEntry;
    toJSON(message: SnapshotSchedule_LabelsEntry): unknown;
    fromPartial<I extends {
        key?: string | undefined;
        value?: string | undefined;
    } & {
        key?: string | undefined;
        value?: string | undefined;
    } & Record<Exclude<keyof I, keyof SnapshotSchedule_LabelsEntry>, never>>(object: I): SnapshotSchedule_LabelsEntry;
};
export declare const SchedulePolicy: {
    encode(message: SchedulePolicy, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SchedulePolicy;
    fromJSON(object: any): SchedulePolicy;
    toJSON(message: SchedulePolicy): unknown;
    fromPartial<I extends {
        startAt?: Date | undefined;
        expression?: string | undefined;
    } & {
        startAt?: Date | undefined;
        expression?: string | undefined;
    } & Record<Exclude<keyof I, keyof SchedulePolicy>, never>>(object: I): SchedulePolicy;
};
export declare const SnapshotSpec: {
    encode(message: SnapshotSpec, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SnapshotSpec;
    fromJSON(object: any): SnapshotSpec;
    toJSON(message: SnapshotSpec): unknown;
    fromPartial<I extends {
        description?: string | undefined;
        labels?: {
            [x: string]: string | undefined;
        } | undefined;
    } & {
        description?: string | undefined;
        labels?: ({
            [x: string]: string | undefined;
        } & {
            [x: string]: string | undefined;
        } & Record<Exclude<keyof I["labels"], string | number>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof SnapshotSpec>, never>>(object: I): SnapshotSpec;
};
export declare const SnapshotSpec_LabelsEntry: {
    encode(message: SnapshotSpec_LabelsEntry, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SnapshotSpec_LabelsEntry;
    fromJSON(object: any): SnapshotSpec_LabelsEntry;
    toJSON(message: SnapshotSpec_LabelsEntry): unknown;
    fromPartial<I extends {
        key?: string | undefined;
        value?: string | undefined;
    } & {
        key?: string | undefined;
        value?: string | undefined;
    } & Record<Exclude<keyof I, keyof SnapshotSpec_LabelsEntry>, never>>(object: I): SnapshotSpec_LabelsEntry;
};
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 {};
