[%
simple = element.simple_type;
very_simple = element.very_simple_type;
is_array = element.max_occurs == 'unbounded'
|| ( element.max_occurs && element.max_occurs > 1 )
|| ( element.min_occurs && element.min_occurs > 1 );
type_name = simple || element.type_module;
searalize = '';
IF very_simple == 'xs:boolean';
searalize = "sub { \$_ ? 'true' : 'false' }";
ELSIF very_simple == 'xs:date';
searalize = "sub {
return \$_->ymd if \$_->time_zone->isa('DateTime::TimeZone::Floating');
my \$d = DateTime::Format::Strptime::strftime('%F%z', \$_);
\$d =~ s/([+-]\\d\\d)(\\d\\d)\$/\$1:\$2/;
return \$d
}";
ELSIF very_simple == 'xs:time';
searalize = "sub { \$_->hms }";
END;
%]
has [% element.perl_name %] => (
is => 'rw',
isa => __PACKAGE__->xsd_subtype( [% simple ? 'parent' : 'module' %] => '[% type_name %]'[% IF is_array %], list => 1[% END %] ),
predicate => 'has_[% element.perl_name %]',
[%- IF element.nillable == 'false' %]
required => 1,
[%- END %]
coerce => 1,
[%- IF config.alias && element.name.replace('^\w+:', '') != element.perl_name %]
alias => '[% element.name.replace('^\w+:', '') %]',
[%- END %]
traits => [qw{ W3C::SOAP::XSD }],
[%- IF !simple %]
xs_perl_module => '[% element.type_module %]',
[%- END %]
xs_name => '[% element.name %]',
xs_type => '[% element.type %]',
xs_min_occurs => '[% element.min_occurs %]',
xs_max_occurs => '[% element.max_occurs == 'unbounded' ? 0 : element.max_occurs %]',
[%- IF element.choice_group %]
xs_choice_group => [% element.choice_group %],
[%- END %]
[%- IF searalize %]
xs_searalize => [% searalize %],
[%- END %]
);