got the basic function for Optional, but the regex is still troubled, now is having...
[gitmo/MooseX-Types-Structured.git] / lib / MooseX / Meta / TypeConstraint / Structured / Generator.pm
CommitLineData
2dfe3b71 1package MooseX::Meta::TypeConstraint::Structured::Generator;
bfef1b30 2
3use strict;
4use warnings;
5
6use metaclass;
7
66c84636 8use base 'Moose::Meta::TypeConstraint';
bfef1b30 9use 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 16sub _parse_type_parameter {
7e2f0558 17 my ($self, $type_str) = @_;
99b27cbd 18 return $self->structured_type->_parse_type_parameter($type_str);
bfef1b30 19}
20
21sub 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 341;