All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.pellse.concurrent.Lock Maven / Gradle / Ivy

Go to download

Small library allowing to efficiently assemble entities from querying/merging external datasources or aggregating microservices

There is a newer version: 0.7.7
Show newest version
package io.github.pellse.concurrent;

import reactor.core.publisher.Mono;

import java.util.function.Consumer;
import java.util.function.UnaryOperator;

import static io.github.pellse.util.ObjectUtils.doNothing;
import static reactor.core.publisher.Mono.fromRunnable;

sealed interface Lock {
    Lock outerLock();

    Consumer releaseLock();

    default Mono release() {
        return fromRunnable(() -> releaseLock().accept(this));
    }

    default Lock unwrap() {
        return this;
    }
}

record ReadLock(Lock outerLock, Consumer releaseLock) implements Lock {
}

record WriteLock(Lock outerLock, Consumer releaseLock) implements Lock {
}

record NoopLock() implements Lock {

    static NoopLock NOOP_LOCK = new NoopLock();

    @Override
    public Lock outerLock() {
        return NOOP_LOCK;
    }

    @Override
    public Consumer releaseLock() {
        return doNothing();
    }
}

record WrapperLock(Lock delegate, UnaryOperator> releaseLockWrapper) implements Lock {

    @Override
    public Lock outerLock() {
        return delegate.outerLock();
    }

    @Override
    public Consumer releaseLock() {
        return releaseLockWrapper.apply(delegate.releaseLock());
    }

    @Override
    public Lock unwrap() {
        return delegate;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy