aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima/Types.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sietima/Types.pm')
-rw-r--r--lib/Sietima/Types.pm13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/Sietima/Types.pm b/lib/Sietima/Types.pm
index 27a3e17..3addf46 100644
--- a/lib/Sietima/Types.pm
+++ b/lib/Sietima/Types.pm
@@ -5,15 +5,24 @@ use Types::Standard qw(Str HashRef);
use namespace::clean;
use Type::Library
-base,
- -declare => qw(Address AddressFromStr
+ -declare => qw(SietimaObj
+ Address AddressFromStr
EmailMIME Message
Subscriber SubscriberFromAddress SubscriberFromStr SubscriberFromHashRef
- Transport MailStore);
+ Transport MailStore MailStoreFromHashRef);
+
+class_type SietimaObj, { class => 'Sietima' };
class_type EmailMIME, { class => 'Email::MIME' };
role_type Transport, { role => 'Email::Sender::Transport' };
role_type MailStore, { role => 'Sietima::MailStore' };
+declare_coercion MailStoreFromHashRef,
+ to_type MailStore, from HashRef,
+ q{ require Module::Runtime;
+ Module::Runtime::use_module(delete $_->{class})->new($_);
+ };
+
class_type Address, { class => 'Email::Address' };
declare_coercion AddressFromStr,
to_type Address, from Str,