import { type MapValueToSnippet, type ResolvedSnippet } from '../../data/snippet.ts';
import { type BaseData } from '../../data/wgslTypes.ts';
import { type DualFn, type ResolutionCtx } from '../../types.ts';
import type { AnyFn } from './fnTypes.ts';
type MapValueToDataType<T> = {
    [K in keyof T]: BaseData;
};
interface CallableSchemaOptions<T extends AnyFn> {
    readonly name: string;
    readonly schema: () => BaseData;
    readonly normalImpl: T;
    readonly codegenImpl: (ctx: ResolutionCtx, args: MapValueToSnippet<Parameters<T>>) => ResolvedSnippet;
    readonly argTypes: (...inArgTypes: MapValueToDataType<Parameters<T>>) => (BaseData | BaseData[])[];
}
export declare function callableSchema<T extends AnyFn>(options: CallableSchemaOptions<T>): DualFn<T>;
export {};
