diff options
Diffstat (limited to 'lib/WebService/ForecastIo/Types.pm')
-rw-r--r-- | lib/WebService/ForecastIo/Types.pm | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/WebService/ForecastIo/Types.pm b/lib/WebService/ForecastIo/Types.pm new file mode 100644 index 0000000..cc8dac2 --- /dev/null +++ b/lib/WebService/ForecastIo/Types.pm @@ -0,0 +1,55 @@ +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; |