1Type::Tiny::Class(3) User Contributed Perl Documentation Type::Tiny::Class(3)
2
3
4
6 Type::Tiny::Class - type constraints based on the "isa" method
7
9 Using via Types::Standard:
10
11 package Local::Horse {
12 use Moo;
13 use Types::Standard qw( Str InstanceOf );
14
15 has name => (
16 is => 'ro',
17 isa => Str,
18 );
19
20 has owner => (
21 is => 'ro',
22 isa => InstanceOf[ 'Local::Person' ],
23 default => sub { Local::Person->new },
24 );
25 }
26
27 Using Type::Tiny::Class's export feature:
28
29 package Local::Horse {
30 use Moo;
31 use Types::Standard qw( Str );
32 use Type::Tiny::Class 'Local::Person';
33
34 has name => (
35 is => 'ro',
36 isa => Str,
37 );
38
39 has owner => (
40 is => 'ro',
41 isa => LocalPerson,
42 default => sub { LocalPerson->new },
43 );
44 }
45
46 Using Type::Tiny::Class's object-oriented interface:
47
48 package Local::Horse {
49 use Moo;
50 use Types::Standard qw( Str );
51 use Type::Tiny::Class;
52
53 my $Person = Type::Tiny::Class->new( class => 'Local::Person' );
54
55 has name => (
56 is => 'ro',
57 isa => Str,
58 );
59
60 has owner => (
61 is => 'ro',
62 isa => $Person,
63 default => sub { $Person->new },
64 );
65 }
66
67 Using Type::Utils's functional interface:
68
69 package Local::Horse {
70 use Moo;
71 use Types::Standard qw( Str );
72 use Type::Utils;
73
74 my $Person = class_type 'Local::Person';
75
76 has name => (
77 is => 'ro',
78 isa => Str,
79 );
80
81 has owner => (
82 is => 'ro',
83 isa => $Person,
84 default => sub { $Person->new },
85 );
86 }
87
89 This module is covered by the Type-Tiny stability policy.
90
92 Type constraints of the general form "{ $_->isa("Some::Class") }".
93
94 This package inherits from Type::Tiny; see that for most documentation.
95 Major differences are listed below:
96
97 Constructor
98 "new"
99 When the constructor is called on an instance of Type::Tiny::Class,
100 it passes the call through to the constructor of the class for the
101 constraint. So for example:
102
103 my $type = Type::Tiny::Class->new(class => "Foo::Bar");
104 my $obj = $type->new(hello => "World");
105 say ref($obj); # prints "Foo::Bar"
106
107 This little bit of DWIM was borrowed from
108 MooseX::Types::TypeDecorator, but Type::Tiny doesn't take the idea
109 quite as far.
110
111 Attributes
112 "class"
113 The class for the constraint.
114
115 "constraint"
116 Unlike Type::Tiny, you cannot pass a constraint coderef to the
117 constructor. Instead rely on the default.
118
119 "inlined"
120 Unlike Type::Tiny, you cannot pass an inlining coderef to the
121 constructor. Instead rely on the default.
122
123 "parent"
124 Parent is automatically calculated, and cannot be passed to the
125 constructor.
126
127 Methods
128 "plus_constructors($source, $method_name)"
129 Much like "plus_coercions" but adds coercions that go via a
130 constructor. (In fact, this is implemented as a wrapper for
131 "plus_coercions".)
132
133 Example:
134
135 package MyApp::Minion;
136
137 use Moose; extends "MyApp::Person";
138
139 use Types::Standard qw( HashRef Str );
140 use Type::Utils qw( class_type );
141
142 my $Person = class_type({ class => "MyApp::Person" });
143
144 has boss => (
145 is => "ro",
146 isa => $Person->plus_constructors(
147 HashRef, "new",
148 Str, "_new_from_name",
149 ),
150 coerce => 1,
151 );
152
153 package main;
154
155 MyApp::Minion->new(
156 ...,
157 boss => "Bob", ## via MyApp::Person->_new_from_name
158 );
159
160 MyApp::Minion->new(
161 ...,
162 boss => { name => "Bob" }, ## via MyApp::Person->new
163 );
164
165 Because coercing "HashRef" via constructor is a common desire, if
166 you call "plus_constructors" with no arguments at all, this is the
167 default.
168
169 $classtype->plus_constructors(HashRef, "new")
170 $classtype->plus_constructors() ## identical to above
171
172 This is handy for Moose/Mouse/Moo-based classes.
173
174 stringifies_to($constraint)
175 See Type::Tiny::ConstrainedObject.
176
177 numifies_to($constraint)
178 See Type::Tiny::ConstrainedObject.
179
180 "with_attribute_values($attr1 => $constraint1, ...)"
181 See Type::Tiny::ConstrainedObject.
182
183 Exports
184 Type::Tiny::Class can be used as an exporter.
185
186 use Type::Tiny::Class 'HTTP::Tiny';
187
188 This will export the following functions into your namespace:
189
190 "HTTPTiny"
191 is_HTTPTiny( $value )
192 assert_HTTPTiny( $value )
193 to_HTTPTiny( $value )
194
195 You will also be able to use "HTTPTiny->new(...)" as a shortcut for
196 "HTTP::Tiny->new(...)".
197
198 Multiple types can be exported at once:
199
200 use Type::Tiny::Class qw( HTTP::Tiny LWP::UserAgent );
201
203 Please report any bugs to
204 <https://github.com/tobyink/p5-type-tiny/issues>.
205
207 Type::Tiny::Manual.
208
209 Type::Tiny.
210
211 Moose::Meta::TypeConstraint::Class.
212
214 Toby Inkster <tobyink@cpan.org>.
215
217 This software is copyright (c) 2013-2014, 2017-2023 by Toby Inkster.
218
219 This is free software; you can redistribute it and/or modify it under
220 the same terms as the Perl 5 programming language system itself.
221
223 THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
224 WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
225 MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
226
227
228
229perl v5.38.0 2023-07-21 Type::Tiny::Class(3)