Custom dry type with multiple constraints

I’d recommend using contract rules for that. Such complex types can be used for coercion purposes but not for validation error messages.