=head2 parameterize (@args)
-Given a ref of type constraints, create a structured type.
+Given a ref of type constraints, create a parameterized constraint
=cut
constraining_value => $args,
parent_type_constraint=>$self->parent_type_constraint,
constraining_value_type_constraint => $self->constraining_value_type_constraint,
+ message => $self->message,
);
## TODO This is probably going to have to go away (too many things added to the registry)
coderef and also throw the correct error message if the constraining value does
not match it's requirement.
+around 'compile_type_constraint' => sub {
+ my ($compile_type_constraint, $self, @args) = @_;
+
+ if($self->has_type_constraints) {
+ my $type_constraints = $self->type_constraints;
+ my $constraint = $self->generate_constraint_for($type_constraints);
+ $self->_set_constraint($constraint);
+ }
+
+ return $self->$compile_type_constraint(@args);
+};
+
+
=cut
around '_compiled_type_constraint' => sub {
around 'coerce' => sub {
my ($coerce, $self, @args) = @_;
-
if($self->has_constraining_value) {
push @args, $self->constraining_value;
- if(@{$self->coercion->type_coercion_map}) {
- my $coercion = $self->coercion;
- my $coerced = $self->$coerce(@args);
- if(defined $coerced) {
- return $coerced;
- } else {
- my $parent = $self->parent;
- return $parent->coerce(@args);
- }
+ }
+ if(@{$self->coercion->type_coercion_map}) {
+ my $coercion = $self->coercion;
+ my $coerced = $coercion->coerce(@args);
+ if(defined $coerced) {
+ return $coerced;
} else {
my $parent = $self->parent;
return $parent->coerce(@args);
- }
- }
- else {
- return $self->$coerce(@args);
- }
- return;
-};
-
-=head2 get_message
-
-Give you a better peek into what's causing the error.
-
-around 'get_message' => sub {
- my ($get_message, $self, $value) = @_;
- return $self->$get_message($value);
+ }
+ } else {
+ my $parent = $self->parent;
+ return $parent->coerce(@args);
+ }
};
=head1 SEE ALSO