package Sietima::Message; use Moo; use Sietima::Policy; use Types::Standard qw(ArrayRef Object); use Sietima::Types qw(Address AddressFromStr Subscriber SubscriberFromAddress SubscriberFromStr EmailMIME); use Email::Address; use Sietima::Subscriber; use Email::MIME; use namespace::clean; has mail => ( is => 'ro', isa => EmailMIME, required => 1, ); has from => ( is => 'ro', isa => Address, coerce => AddressFromStr, required => 1, ); my $subscriber_array = ArrayRef[ Subscriber->plus_coercions( SubscriberFromStr, SubscriberFromAddress, ) ]; has to => ( isa => $subscriber_array, is => 'ro', coerce => $subscriber_array->coercion, required => 1, ); sub envelope ($self) { return { from => $self->from, to => [ map { $_->address } $self->to->@* ], } } 1;