1Type::Tiny::Duck(3)   User Contributed Perl Documentation  Type::Tiny::Duck(3)
2
3
4

NAME

6       Type::Tiny::Duck - type constraints based on the "can" method
7

SYNOPSIS

9       Using via Types::Standard:
10
11         package Logger {
12           use Moo;
13           use Types::Standard qw( HasMethods Bool );
14
15           has debugging => ( is => 'rw', isa => Bool, default => 0 );
16           has output    => ( is => 'ro', isa => HasMethods[ 'print' ] );
17
18           sub warn {
19             my ( $self, $message ) = @_;
20             $self->output->print( "[WARNING] $message\n" );
21           }
22
23           sub debug {
24             my ( $self, $message ) = @_;
25             $self->output->print( "[DEBUG] $message\n" ) if $self->debugging;
26           }
27         }
28
29       Using Type::Tiny::Duck's export feature:
30
31         package Logger {
32           use Moo;
33           use Types::Standard qw( Bool );
34           use Type::Tiny::Duck Printable => [ 'print' ];
35
36           has debugging => ( is => 'rw', isa => Bool, default => 0 );
37           has output    => ( is => 'ro', isa => Printable );
38
39           sub warn {
40             my ( $self, $message ) = @_;
41             $self->output->print( "[WARNING] $message\n" );
42           }
43
44           sub debug {
45             my ( $self, $message ) = @_;
46             $self->output->print( "[DEBUG] $message\n" ) if $self->debugging;
47           }
48         }
49
50       Using Type::Tiny::Duck's object-oriented interface:
51
52         package Logger {
53           use Moo;
54           use Types::Standard qw( Bool );
55           use Type::Tiny::Duck;
56
57           my $Printable = Type::Type::Duck->new(
58             name    => 'Printable',
59             methods => [ 'print' ],
60           );
61
62           has debugging => ( is => 'rw', isa => Bool, default => 0 );
63           has output    => ( is => 'ro', isa => $Printable );
64
65           sub warn {
66             my ( $self, $message ) = @_;
67             $self->output->print( "[WARNING] $message\n" );
68           }
69
70           sub debug {
71             my ( $self, $message ) = @_;
72             $self->output->print( "[DEBUG] $message\n" ) if $self->debugging;
73           }
74         }
75

STATUS

77       This module is covered by the Type-Tiny stability policy.
78

DESCRIPTION

80       Type constraints of the general form "{ $_->can("method") }".
81
82       The name refers to the saying, "If it looks like a duck, swims like a
83       duck, and quacks like a duck, then it probably is a duck". Duck typing
84       can be a more flexible way of testing objects than relying on "isa", as
85       it allows people to easily substitute mock objects.
86
87       This package inherits from Type::Tiny; see that for most documentation.
88       Major differences are listed below:
89
90   Attributes
91       "methods"
92           An arrayref of method names.
93
94       "constraint"
95           Unlike Type::Tiny, you cannot pass a constraint coderef to the
96           constructor.  Instead rely on the default.
97
98       "inlined"
99           Unlike Type::Tiny, you cannot pass an inlining coderef to the
100           constructor.  Instead rely on the default.
101
102       "parent"
103           Parent is always Types::Standard::Object, and cannot be passed to
104           the constructor.
105
106   Methods
107       stringifies_to($constraint)
108           See Type::Tiny::ConstrainedObject.
109
110       numifies_to($constraint)
111           See Type::Tiny::ConstrainedObject.
112
113       "with_attribute_values($attr1 => $constraint1, ...)"
114           See Type::Tiny::ConstrainedObject.
115
116   Exports
117       Type::Tiny::Duck can be used as an exporter.
118
119         use Type::Tiny::Duck HttpClient => [ 'get', 'post' ];
120
121       This will export the following functions into your namespace:
122
123       "HttpClient"
124       is_HttpClient( $value )
125       assert_HttpClient( $value )
126       to_HttpClient( $value )
127
128       Multiple types can be exported at once:
129
130         use Type::Tiny::Duck (
131           HttpClient   => [ 'get', 'post' ],
132           FtpClient    => [ 'upload', 'download' ],
133         );
134

BUGS

136       Please report any bugs to
137       <https://github.com/tobyink/p5-type-tiny/issues>.
138

SEE ALSO

140       Type::Tiny::Manual.
141
142       Type::Tiny.
143
144       Moose::Meta::TypeConstraint::DuckType.
145

AUTHOR

147       Toby Inkster <tobyink@cpan.org>.
148
150       This software is copyright (c) 2013-2014, 2017-2023 by Toby Inkster.
151
152       This is free software; you can redistribute it and/or modify it under
153       the same terms as the Perl 5 programming language system itself.
154

DISCLAIMER OF WARRANTIES

156       THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
157       WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
158       MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
159
160
161
162perl v5.38.0                      2023-07-21               Type::Tiny::Duck(3)
Impressum