$check = $args{constraint};
if(defined($check) && ref($check) ne 'CODE'){
- $class->throw_error("Constraint for $args{name} is not a CODE reference");
+ $class->throw_error(
+ "Constraint for $args{name} is not a CODE reference");
}
my $self = bless \%args, $class;
- $self->compile_type_constraint() if !$self->{hand_optimized_type_constraint};
+ $self->compile_type_constraint()
+ if !$self->{hand_optimized_type_constraint};
$self->_compile_union_type_coercion() if $self->{type_constraints};
return $self;
# a child inherits its parent's attributes
%{$self},
- # but does not inherit 'compiled_type_constraint' and 'hand_optimized_type_constraint'
+ # but does not inherit 'compiled_type_constraint'
+ # and 'hand_optimized_type_constraint'
compiled_type_constraint => undef,
hand_optimized_type_constraint => undef,
sub compile_type_constraint;
-sub _add_type_coercions{
+sub _add_type_coercions { # ($self, @pairs)
my $self = shift;
my $coercions = ($self->{coercion_map} ||= []);
}
my $type = Mouse::Util::TypeConstraints::find_or_parse_type_constraint($from)
- or $self->throw_error("Could not find the type constraint ($from) to coerce from");
+ or $self->throw_error(
+ "Could not find the type constraint ($from) to coerce from");
push @{$coercions}, [ $type => $action ];
}
# compile
if(exists $self->{type_constraints}){ # union type
- $self->throw_error("Cannot add additional type coercions to Union types");
+ $self->throw_error(
+ "Cannot add additional type coercions to Union types");
}
else{
$self->_compile_type_coercion();
return 1 if $self->name eq $other_name;
if(exists $self->{type_constraints}){ # union
- foreach my $type(@{$self->{type_constraints}}){
+ foreach my $type(@{$self->{type_constraints}}) {
return 1 if $type->name eq $other_name;
}
}
- for(my $parent = $self->parent; defined $parent; $parent = $parent->parent){
- return 1 if $parent->name eq $other_name;
+ for(my $p = $self->parent; defined $p; $p = $p->parent) {
+ return 1 if $p->name eq $other_name;
}
return 0;
$name ||= sprintf '%s[%s]', $self->name, $param->name;
my $generator = $self->{constraint_generator}
- || $self->throw_error("The $name constraint cannot be used, because $param doesn't subtype from a parameterizable type");
+ || $self->throw_error("The $name constraint cannot be used,"
+ . " because $param doesn't subtype from a parameterizable type");
return Mouse::Meta::TypeConstraint->new(
name => $name,
=head1 DESCRIPTION
-For the most part, the only time you will ever encounter an
-instance of this class is if you are doing some serious deep
-introspection. This API should not be considered final, but
-it is B<highly unlikely> that this will matter to a regular
-Mouse user.
-
-Don't use this.
+This class represents a type constraint, including built-in
+type constraints, union type constraints, parameterizable/
+parameterized type constraints, as well as custom type
+constraints
=head1 METHODS
-=over 4
+=over
+
+=item C<< Mouse::Meta::TypeConstraint->new(%options) >>
+
+=item C<< $constraint->name >>
+
+=item C<< $constraint->parent >>
+
+=item C<< $constraint->constraint >>
+
+=item C<< $constraint->has_coercion >>
+
+=item C<< $constraint->message >>
+
+=item C<< $constraint->is_a_subtype_of($name or $object) >>
+
+=item C<< $constraint->coerce($value) >>
+
+=item C<< $constraint->check($value) >>
+
+=item C<< $constraint->assert_valid($value) >>
-=item B<new>
+=item C<< $constraint->get_message($value) >>
-=item B<name>
+=item C<< $constraint->create_child_type(%options) >>
=back