I think `Struct` is the right thing to use for value objects like these, because it defines `==`, `eql?` and `hash` with the proper semantics for value objects.  It'll be a lot of extra code to implement those same semantics yourself.  Given that, I think you're better off sticking with struct but just privatizing `used`.