#ifndef MACERATOR_RULE_HPP_
#define MACERATOR_RULE_HPP_

#include <ItemStack/ItemStack.hpp>

/**
 * @brief Describes a rule for mapping macerator inputs to outputs.
 */
class MaceratorRule
{
public:
    virtual ~MaceratorRule() = default;

    /**
     * @brief Get the output stack given an input stack, according to this rule.
     * 
     * Returns an empty stack if this rule does not cover this input. `input` must
     * not be an empty stack.
     */
    virtual ItemStack getMaceratorOutput(ItemStack &input) = 0;
};

#endif