Type::Tiny::Manual::UsingWithMouse (3)
Leading comments
Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) Standard preamble: ========================================================================
NAME
Type::Tiny::Manual::UsingWithMouse - how to use Type::Tiny and Type::Library with MouseSYNOPSIS
{ package Person; use Mouse; use Types::Standard qw( Str Int ); use Type::Utils qw( declare as where inline_as coerce from ); has name => ( is => "ro", isa => Str, ); my $PositiveInt = declare as Int, where { $_ > 0 }, inline_as { "$_ =~ /^[0-9]+\$/ and $_ > 0" }; coerce $PositiveInt, from Int, q{ abs $_ }; has age => ( is => "ro", isa => $PositiveInt, coerce => 1, writer => "_set_age", ); sub get_older { my $self = shift; my ($years) = @_; $PositiveInt->assert_valid($years); $self->_set_age($self->age + $years); } }
STATUS
Mouse support in Type::Tiny was somewhat of an afterthought. It should work, but is not anywhere near as well-tested as Moo or Moose support.DESCRIPTION
Type::Tiny type constraints have anAPI
almost identical to that of
Mouse::Meta::TypeConstraint. As a result, you can use a Type::Tiny
object pretty much anywhere you'd use a Mouse::Meta::TypeConstraint and
you are unlikely to notice the difference. (And Mouse is unlikely to
notice the difference too!)
Per-Attribute Coercions
Type::Tiny offers convenience methods to alter the list of coercions associated with a type constraint. Let's imagine we wish to allow our "name" attribute to be coerced from an arrayref of strings.
has name => ( is => "ro", isa => Str->plus_coercions( ArrayRef[Str], sub { join " ", @{$_} }, ), coerce => 1, );
This coercion will apply to the "name" attribute only; other attributes using the "Str" type constraint will be unaffected.
See the documentation for "plus_coercions", "minus_coercions" and "no_coercions" in Type::Tiny.
Optimization
Mouse's built-in type constraints are implemented usingXS
and are stupidly
fast. For many type constraints, if Type::Tiny notices Mouse is loaded early
enough, Type::Tiny will borrow Mouse's XS
subs.
See also Type::Tiny::Manual::Optimization.
Interactions with MouseX-Types
Type::Tiny and MouseX::Types type constraints should ``play nice''. If, for example, "ArrayRef" is taken from Types::Standard (i.e. a Type::Tiny-based type library), and "PositiveInt" is taken from MouseX::Types::Common::Numeric, then the following should ``just work'':
isa => ArrayRef[ PositiveInt ] isa => PositiveInt | ArrayRef
SEE ALSO
For examples using Type::Tiny with Mouse see theSYNOPSIS
sections of
Type::Tiny and Type::Library, and the
Mouse integration tests <github.com/tobyink/p5-type-tiny/tree/master/t/30-integration/Mouse>,
and
MouseX-Types integration tests <github.com/tobyink/p5-type-tiny/tree/master/t/30-integration/MouseX-Types>
in the test suite.
AUTHOR
Toby Inkster <tobyink@cpan.org>.COPYRIGHT AND LICENCE
This software is copyright (c) 2013-2014, 2017 by Toby Inkster.This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.