/// 
import { FastifyRequest } from 'fastify';
import { Strategy } from './lib/file-appender';
export declare type FilesObject = {
    [fieldname: string]: Partial[];
};
export interface Field {
    name: string;
    maxCount?: number;
}
export interface File {
    fieldname: string;
    originalname: string;
    encoding: string;
    mimetype: string;
    size?: number;
    destination?: string;
    filename?: string;
    path?: string;
    buffer?: Buffer;
    stream?: NodeJS.ReadableStream;
}
export declare type FileFilterCallback = (error: Error | null, acceptFile?: boolean) => void;
export declare type FileFilter = (req: FastifyRequest, file: File, callback: FileFilterCallback) => void;
export interface Options {
    dest?: string;
    storage?: StorageEngine;
    limits?: {
        fieldNameSize?: number;
        fieldSize?: number;
        fields?: number;
        fileSize?: number;
        files?: number;
        parts?: number;
        headerPairs?: number;
    };
    preservePath?: boolean;
    fileFilter?: FileFilter;
}
export interface StorageEngine {
    _handleFile(req: FastifyRequest, file: File, callback: (error?: Error | null, info?: Partial) => void): void;
    _removeFile(req: FastifyRequest, file: File, callback: (error?: Error | null) => void): void;
}
export declare type GetFileName = (req: FastifyRequest, file: File, callback: (error: Error | null, filename?: string) => void) => void;
export declare type GetDestination = (req: FastifyRequest, file: File, callback: (error: Error | null, destination: string) => void) => void;
export interface DiskStorageOptions {
    destination?: string | GetDestination;
    filename?: GetFileName;
}
export declare type Setup = () => {
    storage: StorageEngine;
    limits: Options['limits'];
    preservePath: Options['preservePath'];
    fileFilter: FileFilter;
    fileStrategy: Strategy;
};