Counter.java

package com.guinetik.hexafun.examples.counter;

/**
 * Immutable counter value object.
 */
public record Counter(int value) {
    public Counter increment() {
        return new Counter(value + 1);
    }

    public Counter decrement() {
        return new Counter(value - 1);
    }

    public Counter add(int amount) {
        return new Counter(value + amount);
    }

    public static Counter zero() {
        return new Counter(0);
    }

    public static Counter of(int value) {
        return new Counter(value);
    }
}