MessageResultImpl.java
/*
* SPDX-FileCopyrightText: 2025 kaumei.io
* SPDX-License-Identifier: Apache-2.0
*/
package io.kaumei.jdbc.anno.msg;
import org.jspecify.annotations.Nullable;
import static io.kaumei.jdbc.anno.utils.AnnoUtils.requireState;
import static java.util.Objects.requireNonNull;
final class MessageResultImpl<T> implements Msg.Result<T> {
private final @Nullable T value;
private final Msg.Messages messages;
MessageResultImpl(Msg.Messages messages) {
if (messages.hasNoMessages()) {
throw new IllegalArgumentException("messages must not be empty");
}
this.value = null;
this.messages = messages;
}
MessageResultImpl(T value) {
this.value = requireNonNull(value, "value");
this.messages = Msg.empty();
}
@Override
public String toString() {
if (this.value == null) {
return "MessageResult" + this.messages;
} else {
return "MessageResult[" + this.value + "]";
}
}
// interface Msg.MessageState ---------------------------------------------
@Override
public boolean hasMessages() {
return this.messages.hasMessages();
}
@Override
public Msg.Messages messages() {
return this.messages;
}
// interface Msg.Result ---------------------------------------------------
@Override
public T value() {
return requireState(this.value, "messages are not empty");
}
@Override
public @Nullable T valueOrNull() {
return value;
}
}