Commit | Line | Data |
2dfe3b71 |
1 | package MooseX::Meta::TypeConstraint::Structured::Generator; |
bfef1b30 |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use metaclass; |
7 | |
66c84636 |
8 | use base 'Moose::Meta::TypeConstraint'; |
bfef1b30 |
9 | use Moose::Util::TypeConstraints (); |
bfef1b30 |
10 | |
66c84636 |
11 | __PACKAGE__->meta->add_attribute('structured_type' => ( |
12 | accessor => 'structured_type', |
13 | predicate => 'has_structured_type', |
14 | )); |
15 | |
99b27cbd |
16 | sub _parse_type_parameter { |
7e2f0558 |
17 | my ($self, $type_str) = @_; |
99b27cbd |
18 | return $self->structured_type->_parse_type_parameter($type_str); |
bfef1b30 |
19 | } |
20 | |
21 | sub parameterize { |
dbd75632 |
22 | my ($self, $parameter_string) = @_; |
99b27cbd |
23 | my @contained_tcs = $self->_parse_type_parameter($parameter_string); |
011bacc6 |
24 | my $tc_name = $self->name .'['. join(',', map {$_->name} @contained_tcs) .']'; |
bfef1b30 |
25 | |
7e2f0558 |
26 | return $self->structured_type->new( |
bfef1b30 |
27 | name => $tc_name, |
7e2f0558 |
28 | parent => $self->parent, |
bfef1b30 |
29 | package_defined_in => __PACKAGE__, |
99b27cbd |
30 | signature => \@contained_tcs, |
bfef1b30 |
31 | ); |
bfef1b30 |
32 | } |
33 | |
bfef1b30 |
34 | 1; |