package MyApp::Types; use strict; use warnings; use utf8; use Mouse::Util::TypeConstraints; subtype 'PositiveInt' => as 'Int' => where { $_ > 0 } => message { "($_)は正の数ではありません" }; subtype 'UserId' => as 'PositiveInt' => where { $_ <= 300 } => message { "($_)は300以下ではありません" }; subtype 'AdminUserId' => as 'UserId' => where { $_ == 1 } => message { "($_)は管理ユーザーではありません" }; 1;
上のようなMyApp::Typesというのを作ってモデルとかで
sub search_user { state $rule = Data::Validator->new( user_id => {isa => 'AdminUserId'}, ); my $args = $rule->validate(user_id => 400); ...; }
とかやると"(400)は管理ユーザーではありません"ってエラーが出るんですけど、本当は"(400)は300以下ではありません"って出したいんだけど、無理なのかな。