/** @module run */

/**
 * Interface for components that should clean their state.
 * 
 * Cleaning state most often is used during testing. 
 * But there may be situations when it can be done in production.
 * 
 * @see [[Cleaner]]
 * 
 * ### Example ###
 * 
 *     class MyObjectWithState implements ICleanable {
 *         private _state: any = {};
 *         ...
 *         public clear(correlationId: string): void {
 *             this._state = {};
 *         }
 *     }
 * 
 */
export interface ICleanable {
	/**
	 * Clears component state.
	 * 
	 * @param correlationId 	(optional) transaction id to trace execution through call chain.
     * @param callback 			callback function that receives error or null no errors occured.
	 */
	clear(correlationId: string, callback?: (err: any) => void): void;
}
