// This file is auto-generated by alef — DO NOT EDIT.
// alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
// To regenerate: alef generate
// To verify freshness: alef verify --exit-code
// Issues & docs: https://github.com/kreuzberg-dev/alef
package dev.kreuzberg;

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;

/**
 * Changes to embedded archive children between two results.
 */
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonDeserialize(builder = EmbeddedChanges.Builder.class)
public record EmbeddedChanges(
    /**
     * Children present in {@code b} but not in {@code a} (matched by {@code path}).
     */
    @JsonProperty("added") List<ArchiveEntry> added,
    /**
     * Children present in {@code a} but not in {@code b} (matched by {@code path}).
     */
    @JsonProperty("removed") List<ArchiveEntry> removed,
    /**
     * Children present in both but with differing content (matched by {@code path}).
     *
     * Each entry holds the diff of the nested {@code ExtractionResult}.
     */
    @JsonProperty("changed") List<EmbeddedDiff> changed
) {
    public static Builder builder() {
        return new Builder();
    }

    // CPD-OFF
    @JsonPOJOBuilder(withPrefix = "with", buildMethodName = "build")
    public static final class Builder {

private List<ArchiveEntry> added = List.of();
private List<ArchiveEntry> removed = List.of();
private List<EmbeddedDiff> changed = List.of();

        /** Sets the added field. */
        @JsonProperty("added")
        public Builder withAdded(final List<ArchiveEntry> value) {
            this.added = value;
            return this;
        }

        /** Sets the removed field. */
        @JsonProperty("removed")
        public Builder withRemoved(final List<ArchiveEntry> value) {
            this.removed = value;
            return this;
        }

        /** Sets the changed field. */
        @JsonProperty("changed")
        public Builder withChanged(final List<EmbeddedDiff> value) {
            this.changed = value;
            return this;
        }

        /** Builds the EmbeddedChanges instance. */
        public EmbeddedChanges build() {
            return new EmbeddedChanges(
                added,
                removed,
                changed
            );
        }
    }
    // CPD-ON
}
