Toby Inkster > Type-Tiny > Type::Tiny::Manual::UsingWithMouse

Download:
Type-Tiny-1.000004.tar.gz

Annotate this POD

Website

CPAN RT

Open  2
View/Report Bugs
Source   Latest Release: Type-Tiny-1.001_001

NAME ^

Type::Tiny::Manual::UsingWithMouse - how to use Type::Tiny and Type::Library with Mouse

SYNOPSIS ^

   {
      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 an API 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 using XS 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 the SYNOPSIS sections of Type::Tiny and Type::Library, and the Mouse integration tests, and MouseX-Types integration tests in the test suite.

AUTHOR ^

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE ^

This software is copyright (c) 2013-2014 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.

syntax highlighting: