package Mouse::Meta::TypeConstraint;
use strict;
use warnings;
+use Carp ();
+
use overload '""' => sub { shift->{name} }, # stringify to tc name
fallback => 1;
$self->{_compiled_type_constraint}->(@_);
}
+sub validate {
+ my ($self, $value) = @_;\r
+ if ($self->{_compiled_type_constraint}->($value)) {\r
+ return undef;\r
+ }\r
+ else {\r
+ $self->get_message($value);\r
+ }\r
+}
+
+sub assert_valid {\r
+ my ($self, $value) = @_;\r
+\r
+ my $error = $self->validate($value);\r
+ return 1 if ! defined $error;\r
+
+ Carp::confess($error);\r
+}\r
+
+
sub message {
return $_[0]->{message};
}
}
}
+sub is_a_type_of{
+ my($self, $tc_name) = @_;
+
+ return $self->name eq $tc_name
+ || $self->name =~ /\A $tc_name \[/xms; # "ArrayRef" =~ "ArrayRef[Foo]"
+}
+
1;
__END__