The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TypeTest::Objects;

use Elastic::Doc;
use MooseX::Types -declare => ['NotDefined'];
use MooseX::Types::Moose qw(:all);

#===================================
has 'object_attr' => (
#===================================
    is  => 'ro',
    isa => 'Object',
);

#===================================
has 'objectx_attr' => (
#===================================
    is  => 'ro',
    isa => Object,
);

#===================================
has 'doc_attr' => (
#===================================
    is  => 'ro',
    isa => 'Foo::User',
);

#===================================
has 'doc_none_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Foo::User',
    include_attrs => [],
);

#===================================
has 'doc_name_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Foo::User',
    include_attrs => ['name'],
);

#===================================
has 'doc_exname_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Foo::User',
    exclude_attrs => ['name'],
);

#===================================
has 'moose_attr' => (
#===================================
    is  => 'ro',
    isa => 'Moose::One',
);

#===================================
has 'moose_none_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Moose::One',
    include_attrs => [],
);

#===================================
has 'moose_name_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Moose::One',
    include_attrs => ['name'],
);

#===================================
has 'moose_exname_attr' => (
#===================================
    is            => 'ro',
    isa           => 'Moose::One',
    exclude_attrs => ['name'],
);

#===================================
has 'non_moose_attr' => (
#===================================
    is  => 'ro',
    isa => 'Non::Moose',
);

#===================================
has 'not_defined_attr' => (
#===================================
    is  => 'ro',
    isa => NotDefined,
);

#===================================
has 'custom_attr' => (
#===================================
    is       => 'ro',
    mapping  => { type => 'string' },
    deflator => sub { $_[0] * 2 },
    inflator => sub { $_[0] / 2 }
);

#===================================
has 'bad_mapping_attr' => (
#===================================
    is  => 'ro',
    isa => 'BadMapping',
);

#===================================
has 'custom_class_attr' => (
#===================================
    is  => 'ro',
    isa => 'CustomClass',
);

#===================================
has 'no_tc_attr' => (
#===================================
    is => 'ro',
);

#===================================

package Moose::One;
use Moose;

#===================================
has 'name' => (
#===================================
    is  => 'ro',
    isa => 'Str',
);

#===================================
has 'two' => (
#===================================
    is  => 'ro',
    isa => 'Moose::Two'
);

package Moose::Two;
use Moose;

#===================================
has 'foo' => (
#===================================
    is  => 'ro',
    isa => 'Str',
);

package Non::Moose;

#===================================
sub foo { }
#===================================

no Elastic::Doc;

1;