The Ecto.Type behaviour doesn’t have callbacks that take those options as an argument. They are only used by the Ecto.Schema.field/3 macro.
I think the idea behind this is that types are really only there to perform data casting and loading (i. e. from DB data type to Elixir and vice versa) and not for validation.
And what you’re trying to do here seems more like an attempt to validate or constrain the possible values of a field. This is easily achieved with changesets, so you don’t even need to implement a custom type