This is pretty neat. I'm always in favor of multiple levels of data validation and your use of Moose is good in this sense. Check out Data::Manager as well (or Data::Verifier if you just want the validation goodness), it uses Moose's type constraint system to validate your data.