DocumentDiagnostic.java
package org.hammer.audio.plugin.document;
import java.util.Objects;
/**
* One side-effect-free validation or migration diagnostic.
*
* @param severity diagnostic severity
* @param pointer JSON Pointer locating the affected value
* @param code stable machine-readable diagnostic code
* @param message human-readable diagnostic message
*/
public record DocumentDiagnostic(Severity severity, String pointer, String code, String message) {
// Validate and normalize diagnostic fields.
public DocumentDiagnostic {
Objects.requireNonNull(severity, "severity");
pointer = pointer == null || pointer.isBlank() ? "/" : pointer;
code = requireNonBlank(code, "code");
message = requireNonBlank(message, "message");
}
/** Diagnostic severity. */
public enum Severity {
/** Informational normalization or migration note. */
INFO,
/** Non-blocking portability or compatibility warning. */
WARNING,
/** Validation error that blocks execution or application. */
ERROR
}
private static String requireNonBlank(String value, String label) {
Objects.requireNonNull(value, label);
if (value.isBlank()) {
throw new IllegalArgumentException(label + " must not be blank");
}
return value;
}
}