DocumentValidationResult.java

package org.hammer.audio.plugin.document;

import java.util.List;
import java.util.Objects;

/**
 * Side-effect-free plugin-section validation result.
 *
 * @param normalizedValue deterministic normalized section value
 * @param diagnostics immutable diagnostics
 */
public record DocumentValidationResult(
    DocumentValue normalizedValue, List<DocumentDiagnostic> diagnostics) {

  // Validate and defensively copy the result.
  public DocumentValidationResult {
    Objects.requireNonNull(normalizedValue, "normalizedValue");
    diagnostics = List.copyOf(Objects.requireNonNull(diagnostics, "diagnostics"));
  }

  /** Return a successful result without diagnostics. */
  public static DocumentValidationResult valid(DocumentValue normalizedValue) {
    return new DocumentValidationResult(normalizedValue, List.of());
  }

  /** Return whether any diagnostic blocks execution or application. */
  public boolean hasErrors() {
    return diagnostics.stream()
        .anyMatch(diagnostic -> diagnostic.severity() == DocumentDiagnostic.Severity.ERROR);
  }
}