class Money implements ValueObject {

    @NonNull
    public Money add(@NonNull Money augend) {
        Objects.requireNonNull(augend, "augend must not be null");
        if (currency != augend.currency) {
            throw new IllegalArgumentException("Cannot add two Money objects with different currencies");
        }
        return new Money(currency, amount + augend.amount);
    }

    @JsonCreator public  Money(@NonNull @JsonProperty("currency") Currency currency, @JsonProperty("amount") int amount);
    public  Money(@NonNull Currency currency, double amount);

}