package WebService::ForecastIo::Types; use strict; use warnings; use namespace::autoclean; use Type::Library -base, -declare => qw( Alert AlertArray DataBlock DataPoint DataPointArray ); use Type::Utils -all; use Types::Standard -types; class_type Alert, { class => 'WebService::ForecastIo::Alert' }; declare AlertArray, as ArrayRef[Alert]; coerce Alert, from HashRef, via { require WebService::ForecastIo::Alert; WebService::ForecastIo::Alert->new($_); }; coerce AlertArray, from ArrayRef[HashRef], via { require WebService::ForecastIo::Alert; my $array = $_; [ map { WebService::ForecastIo::Alert->new($_) } @$array ] }; class_type DataBlock, { class => 'WebService::ForecastIo::DataBlock' }; coerce DataBlock, from HashRef, via { require WebService::ForecastIo::DataBlock; WebService::ForecastIo::DataBlock->new($_); }; class_type DataPoint, { class => 'WebService::ForecastIo::DataPoint' }; declare DataPointArray, as ArrayRef[DataPoint]; coerce DataPoint, from HashRef, via { require WebService::ForecastIo::DataPoint; WebService::ForecastIo::DataPoint->new($_); }; coerce DataPointArray, from ArrayRef[HashRef], via { require WebService::ForecastIo::DataPoint; my $array = $_; [ map { WebService::ForecastIo::DataPoint->new($_) } @$array ] }; 1;