Metadata.java

package org.hammer.audio.workflow;

import java.util.Map;
import java.util.Objects;

/**
 * Immutable metadata bag for workflow domain objects.
 *
 * @param entries immutable metadata entries keyed by stable names
 */
public record Metadata(Map<String, String> entries) {

  private static final Metadata EMPTY = new Metadata(Map.of());

  public Metadata {
    Objects.requireNonNull(entries, "entries");
    for (String key : entries.keySet()) {
      StableIds.requireStable(key, "metadata key");
    }
    entries = Map.copyOf(entries);
  }

  public static Metadata empty() {
    return EMPTY;
  }
}