IdempotentImpl.java

package io.github.jonloucks.contracts.impl;

import java.util.concurrent.atomic.AtomicBoolean;

final class IdempotentImpl {
    IdempotentImpl() {
    }
    
    boolean transitionToOpen() {
        return state.compareAndSet(IS_CLOSED, IS_OPEN);
    }
    
    boolean transitionToClosed() {
        return state.compareAndSet(IS_OPEN, IS_CLOSED);
    }
    
    boolean isOpen() {
        return state.get() == IS_OPEN;
    }
    
    private static final boolean IS_CLOSED = false;
    private static final boolean IS_OPEN = true;
    
    private final AtomicBoolean state = new AtomicBoolean(false);
}