import type { CDK } from "@k8ts/sample-interfaces";
import type { Ref2_Of, Resource_Entity, Resource_Ref_Keys_Of, Resource_Ref_Min } from "@k8ts/instruments";
import { Resource_Child } from "@k8ts/instruments";
import { v1 } from "../../../kinds/default";
import { Container_Mount_Volume, type Container_Mount_Props } from "../container/mounts";
export interface Pod_Volume_Backend_Pvc<A extends Ref2_Of<v1.PersistentVolumeClaim._> = Ref2_Of<v1.PersistentVolumeClaim._>> {
    $backend: A;
    readOnly?: boolean;
}
declare const allowedVolumeResourceKinds: readonly [import("@k8ts/instruments").Kind.Kind<"", "v1", "ConfigMap">, import("@k8ts/instruments").Kind.Kind<"", "v1", "Secret">];
type VolumeResourceKind = (typeof allowedVolumeResourceKinds)[number];
export type AllowedResources = Resource_Ref_Min<VolumeResourceKind>;
export interface Pod_Volume_Backend_ConfigMap<A extends Ref2_Of<v1.ConfigMap._> = Ref2_Of<v1.ConfigMap._>> {
    $backend: A;
    optional?: boolean;
    mappings?: {
        [K in Resource_Ref_Keys_Of<A>]?: string;
    };
}
export interface Pod_Volume_Backend_Secret<A extends Ref2_Of<v1.Secret._> = Ref2_Of<v1.Secret._>> {
    $backend: A;
    optional?: boolean;
    mappings?: {
        [K in Resource_Ref_Keys_Of<A>]?: string;
    };
}
export type Pod_Volume_Backend = Pod_Volume_Backend_Pvc | Pod_Volume_Backend_ConfigMap | Pod_Volume_Backend_Secret;
type _KeysOf<T> = T extends {
    $backend: {
        keys: infer Ks extends string[];
    };
} ? Ks[number] : never;
type _Mapped<T> = T extends {
    mappings: infer M;
} ? {
    [K in _KeysOf<T>]: K extends keyof M ? M[K] : K;
}[_KeysOf<T>] : _KeysOf<T>;
export type Pod_Volume_Backend_Known_Paths<T extends Pod_Volume_Backend> = string & _Mapped<T>;
export declare abstract class Pod_Volume<P extends Pod_Volume_Backend = Pod_Volume_Backend> extends Resource_Child<P> {
    get kind(): import("@k8ts/instruments").Kind.SubKind<"Volume", import("@k8ts/instruments").Kind.Kind<"", "v1", "Pod">>;
    get sourceNamespace(): string | undefined;
    protected __needs__(): Record<string, Resource_Entity | Resource_Entity[] | undefined>;
    Mount(options?: Omit<Container_Mount_Props<Pod_Volume_Backend_Known_Paths<P>>, "volume">): Container_Mount_Volume;
    protected abstract __submanifest__(): CDK.Volume;
}
export declare class Pod_Volume_Pvc extends Pod_Volume<Pod_Volume_Backend_Pvc> {
    protected __submanifest__(): CDK.Volume;
}
export declare class Pod_Volume_ConfigMap extends Pod_Volume<Pod_Volume_Backend_ConfigMap> {
    protected __submanifest__(): CDK.Volume;
}
export declare class Pod_Volume_Secret<Source extends Ref2_Of<v1.Secret._>> extends Pod_Volume<Pod_Volume_Backend_Secret> {
    protected __submanifest__(): CDK.Volume;
}
export {};
//# sourceMappingURL=volumes.d.ts.map