use strict; use warnings; use Test::More tests => 4; { package Response; use Mouse; use Mouse::Util::TypeConstraints; require t::lib::ClassType_Foo; # XXX: This below API is different from that of Moose. # class_type() should be class_type 'ClassName'; # class_type 'Headers' => { class => 't::lib::ClassType_Foo' }; # this should be subtype Headers => as 't::lib::ClassType_foo'; subtype 'Headers' => as 't::lib::ClassType_Foo' ; coerce 'Headers' => from 'HashRef' => via { t::lib::ClassType_Foo->new(%{ $_ }); }, ; has headers => ( is => 'rw', isa => 'Headers', coerce => 1, ); } my $res = Response->new(headers => { foo => 'bar' }); isa_ok($res->headers, 't::lib::ClassType_Foo'); is($res->headers->foo, 'bar'); $res->headers({foo => 'yay'}); isa_ok($res->headers, 't::lib::ClassType_Foo'); is($res->headers->foo, 'yay');