NAME
    Types::XMLSchema - XMLSchema compatible Moose types library

VERSION
    version 0.01

SYNOPSIS
        package My::Class;
        use Moose;
        use Types::XMLSchema qw( :all );

        has 'string'       => ( is => 'rw', isa => XsString );

        has 'boolean'      => ( is => 'rw', isa => XsBoolean );

        has 'byte'         => ( is => 'rw', isa => XsByte );
        has 'short'        => ( is => 'rw', isa => XsShort );
        has 'int'          => ( is => 'rw', isa => XsInt );
        has 'long'         => ( is => 'rw', isa => XsLong, coerce => 1 );
        has 'integer'      => ( is => 'rw', isa => XsInteger, coerce => 1 );
        has 'float'        => ( is => 'rw', isa => XsFloat, coerce => 1 );
        has 'double'       => ( is => 'rw', isa => XsDouble, coerce => 1 );
        has 'decimal'      => ( is => 'rw', isa => XsDecimal, coerce => 1 );

        has 'duration'     => ( is => 'rw', isa => XsDuration, coerce => 1 );
        has 'datetime'     => ( is => 'rw', isa => XsDateTime, coerce => 1 );
        has 'time'         => ( is => 'rw', isa => XsTime, coerce => 1 );
        has 'date'         => ( is => 'rw', isa => XsDate, coerce => 1 );
        has 'gYearMonth'   => ( is => 'rw', isa => XsGYearMonth, coerce => 1 );
        has 'gYear'        => ( is => 'rw', isa => XsGYear, coerce => 1 );
        has 'gMonthDay'    => ( is => 'rw', isa => XsGMonthDay, coerce => 1 );
        has 'gDay'         => ( is => 'rw', isa => XsGDay, coerce => 1 );
        has 'gMonth'       => ( is => 'rw', isa => XsGMonth, coerce => 1 );

        has 'base64Binary' => ( is => 'rw', isa => XsBase64Binary, coerce => 1 );

        has 'anyURI'            => ( is => 'rw', isa => XsAnyURI, coerce => 1 );

        has 'nonPositiveInteger' => ( is => 'rw', isa => XsNonPositiveInteger, coerce => 1 );
        has 'positiveInteger'    => ( is => 'rw', isa => XsPositiveInteger, coerce => 1 );
        has 'nonNegativeInteger' => ( is => 'rw', isa => XsNonNegativeInteger, coerce => 1 );
        has 'negativeInteger'    => ( is => 'rw', isa => XsNegativeInteger, coerce => 1 );

        has 'unsignedByte'    => ( is => 'rw', isa => XsUnsignedByte );
        has 'unsignedShort'   => ( is => 'rw', isa => XsUnsignedShort );
        has 'unsignedInt'     => ( is => 'rw', isa => XsUnsignedInt );
        has 'unsignedLong'    => ( is => 'rw', isa => XsUnsignedLong, coerce => 1 );

    Then, elsewhere:

        my $object = My::Class->new(
            string          => 'string',
            decimal         => Math::BigFloat->new(20.12),
            duration        => DateTime->now - DateTime->(year => 1990),
            base64Binary    => IO::File->new($0),
        );

DESCRIPTION
    This class provides a number of XMLSchema compatible types for your
    Moose classes.

TYPES
  XsString
        has 'string'       => (
            is => 'rw',
            isa => XsString
        );

    A wrapper around built-in Str.

  XsInteger
        has 'integer'      => (
            is => 'rw',
            isa => XsInteger,
            coerce => 1
        );

    A Math::BigInt object. Set to coerce from Int/Str.

    This is defined in XSchema to be an arbitrary size integer.

  XsPositiveInteger
        has 'positiveInteger' => (
            is => 'rw',
            isa => XsPositiveInteger,
            coerce => 1,
        );

    A Math::BigInt object. Set to coerce from Int/Str.

    This is defined in XSchema to be an arbitrary size integer greater than
    zero.

  XsNonPositiveInteger
        has 'nonPositiveInteger' => (
            is => 'rw',
            isa => XsNonPositiveInteger,
            coerce => 1,
        );

    A Math::BigInt object. Set to coerce from Int/Str.

    This is defined in XSchema to be an arbitrary size integer less than or
    equal to zero.

  XsNegativeInteger
        has 'negativeInteger' => (
            is => 'rw',
            isa => XsNegativeInteger,
            coerce => 1,
        );

    A Math::BigInt object. Set to coerce from Int/Str.

    This is defined in XSchema to be an arbitrary size integer less than
    zero.

  XsNonNegativeInteger
        has 'nonPositiveInteger' => (
            is => 'rw',
            isa => XsNonNegativeInteger,
            coerce => 1,
        );

    A Math::BigInt object. Set to coerce from Int/Str.

    This is defined in XSchema to be an arbitrary size integer greater than
    or equal to zero.

  XsLong
        has 'long' => (
            is => 'rw',
            isa => XsLong,
            coerce => 1,
        );

    A 64-bit Integer. Represented as a Math::Bigint object, but limited to
    the 64-bit (signed) range. Set to coerce from Int/Str.

  XsUnsignedLong
        has 'unsignedLong' => (
            is => 'rw',
            isa => XsUnsignedLong,
            coerce => 1,
        );

    A 64-bit Integer. Represented as a Math::Bigint object, but limited to
    the 64-bit (unsigned) range. Set to coerce from Int/Str.

  XsInt
        has 'int' => (
            is => 'rw',
            isa => XsInt
        );

    A 32-bit integer. Represented natively.

  XsUnsignedInt
        has 'unsignedInt' => (
            is => 'rw',
            isa => XsUnsignedInt
        );

    A 32-bit integer. Represented natively.

  XsShort
        has 'short' => (
            is => 'rw',
            isa => XsShort
        );

    A 16-bit integer. Represented natively.

  XsUnsignedShort
        has 'unsignedShort' => (
            is => 'rw',
            isa => XsUnsignedShort
        );

    A 16-bit integer. Represented natively.

  XsByte
        has 'byte' => (
            is => 'rw',
            isa => XsByte
        );

    An 8-bit integer. Represented natively.

  XsUnsignedByte
        has 'unsignedByte' => (
            is => 'rw',
            isa => XsUnsignedByte
        );

    An 8-bit integer. Represented natively.

  XsBoolean
        has 'boolean' => (
            is => 'rw',
            isa => XsBoolean
        );

    A wrapper around built-in Bool.

  XsFloat
        has 'float' => (
            is => 'rw',
            isa => XsFloat,
            coerce => 1,
        );

    A single-precision 32-bit Float. Represented as a Math::BigFloat object,
    but limited to the 32-bit range. Set to coerce from Num/Str.

  XsDouble
        has 'double' => (
            is => 'rw',
            isa => XsDouble,
            coerce => 1,
        );

    A double-precision 64-bit Float. Represented as a Math::BigFloat object,
    but limited to the 64-bit range. Set to coerce from Num/Str.

  XsDecimal
        has 'decimal' => (
            is => 'rw',
            isa => XsDecimal,
            coerce => 1,
        );

    Any base-10 fixed-point number. Represented as a Math::BigFloat object.
    Set to coerce from Num/Str.

  XsDuration
        has 'duration' => (
            is => 'rw',
            isa => XsDuration,
            coerce => 1,
        );

    A wrapper around Str. If you enable coerce you can pass a
    DateTime::Duration object.

  XsDateTime
        has 'datetime' => (
            is => 'rw',
            isa => XsDateTime,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object.

  XsTime
        has 'time' => (
            is => 'rw',
            isa => XsTime,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object.

  XsDate
        has 'date'  => (
            is => 'rw',
            isa => XsDate,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object.

  XsGYearMonth
        has 'gYearMonth' => (
            is => 'rw',
            isa => XsGYearMonth,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object or a ArrayRef of two integers.

  XsGYear
        has 'gYear' => (
            is => 'rw',
            isa => XsGYear,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object.

  XsGMonthDay
        has 'gMonthDay' => (
            is => 'rw',
            isa => XsGMonthDay,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object or a ArrayRef of two integers.

  XsGDay
        has 'gDay' => (
            is => 'rw',
            isa => XsGDay,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object or Int eg. 24.

  XsGMonth
        has 'gMonth' => (
            is => 'rw',
            isa => XsGMonth,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a DateTime
    object or Int eg. 10.

  XsBase64Binary
        has 'base64Binary' => (
            is => 'rw',
            isa => XsBase64Binary,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a IO::Handle
    object - the content of the file will be encoded to UTF-8 before
    encoding with base64.

  XsAnyURI
        has 'anyURI' => (
            is => 'rw',
            isa => XsAnyURI,
            coerce => 1
        );

    A wrapper around Str. If you enable coerce you can pass a URI object.

SEE ALSO
    *   Enable attributes coercion automatically with

        MooseX::AlwaysCoerce

AUTHOR
    Alex J. G. Burzyński <ajgb@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2012 by Alex J. G. Burzyński
    <ajgb@cpan.org>.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

