package MouseX::Types::Common::Numeric;

use strict;
use warnings;

our $VERSION = '0.001000';

use MouseX::Types -declare => [
  qw(PositiveNum PositiveInt NegativeNum NegativeInt SingleDigit)
];

use MouseX::Types::Mouse qw/Num Int/;

subtype PositiveNum,
  as Num,
  where { $_ >= 0 },
  message { "Must be a positive number" };

subtype PositiveInt,
  as Int,
  where { $_ >= 0 },
  message { "Must be a positive integer" };

subtype NegativeNum,
  as Num,
  where { $_ <= 0 },
  message { "Must be a negative number" };

subtype NegativeInt,
  as Int,
  where { $_ <= 0 },
  message { "Must be a negative integer" };

subtype SingleDigit,
  as PositiveInt,
  where { $_ <= 9 },
  message { "Must be a single digit" };


1;
__END__

=head1 NAME

MouseX::Types::Common::Numeric - A set of commonly-used numeric type constraints

=head1 SYNOPSIS

    use MouseX::Types::Common::Numeric qw/PositiveInt/;
    has count => (is => 'rw', isa => PositiveInt);

    ...
    #this will fail
    $object->count(-33);

=head1 DESCRIPTION

A set of commonly-used numeric type constraints that do not ship with Mouse by
default.

=over

=item * PositiveNum

=item * PositiveInt

=item * NegativeNum

=item * Int

=item * SingleDigit

=back

=head1 SEE ALSO

=over

=item * L<MouseX::Types::Common::String>

=back

=head1 AUTHORS

Please see:: L<MouseX::Types::Common>

=cut