package de.gecheckt.pdf.umbenenner.application.port.out;

/**
 * Handle für einen erworbenen Run-Lock.
 * <p>
 * Dieses Interface ermöglicht die Nutzung des Run-Locks in einem
 * try-with-resources-Block. Das Schließen des Handles gibt den Lock
 * idempotent frei – mehrfaches Aufrufen von {@link #close()} ist sicher
 * und hat nach dem ersten Aufruf keine Wirkung.
 * <p>
 * Instanzen dieses Typs werden ausschließlich von
 * {@link RunLockPort#tryAcquire()} erzeugt und dürfen nicht
 * weitergegeben oder gecacht werden.
 */
public interface RunLockHandle extends AutoCloseable {

    /**
     * Gibt den Run-Lock frei.
     * <p>
     * Diese Methode ist idempotent: Mehrfaches Aufrufen hat nach dem
     * ersten Aufruf keine weitere Wirkung. Implementierungen dürfen
     * keine geprüfte Ausnahme werfen.
     */
    @Override
    void close();
}
