#pragma once

#include <string>

// Opaque tagged id of every transportable material (ores, ingots,
// intermediates, building_blocks, scrap). Defined in config; the simulation
// does not enumerate item types.
//
// Wrapped in a struct (rather than a bare std::string typedef) so that function
// signatures make the semantic intent explicit.
struct ItemType
{
    std::string id;
};

inline bool operator==(const ItemType& a, const ItemType& b)
{
    return a.id == b.id;
}

inline bool operator!=(const ItemType& a, const ItemType& b)
{
    return a.id != b.id;
}

inline bool operator<(const ItemType& a, const ItemType& b)
{
    return a.id < b.id;
}
