import type { NobjcObject } from "objc-js";
import type { _NSKeyedArchiver } from "./NSKeyedArchiver.js";
export interface _NSKeyedArchiverDelegate {
    /** substitution */
    archiver$willEncodeObject$?(archiver: _NSKeyedArchiver, object_: NobjcObject): NobjcObject | null;
    /**
     * Informs the delegate that the object is about to be encoded. The delegate either returns this object or can return a different object to be encoded instead. The delegate can also fiddle with the coder state. If the delegate returns nil, nil is encoded. This method is called after the original object may have replaced itself with replacementObjectForKeyedArchiver:. This method is not called for an object once a replacement mapping has been setup for that object (either explicitly, or because the object has previously been encoded). This is also not called when nil is about to be encoded. This method is called whether or not the object is being encoded conditionally.
     */
    archiver$didEncodeObject$?(archiver: _NSKeyedArchiver, object_: NobjcObject | null): void;
    /** notification */
    archiver$willReplaceObject$withObject$?(archiver: _NSKeyedArchiver, object_: NobjcObject | null, newObject: NobjcObject | null): void;
    /**
     * Informs the delegate that the newObject is being substituted for the object. This is also called when the delegate itself is doing/has done the substitution. The delegate may use this method if it is keeping track of the encoded or decoded objects.
     */
    archiverWillFinish$?(archiver: _NSKeyedArchiver): void;
    /** Notifies the delegate that encoding is about to finish. */
    archiverDidFinish$?(archiver: _NSKeyedArchiver): void;
}
