NAME
    MooseX::Types::XMLSchema - XMLSchema compatible Moose types library

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

        has 'string'       => ( is => 'rw', isa => 'xs:string' );
        has 'int'          => ( is => 'rw', isa => 'xs:int' );
        has 'integer'      => ( is => 'rw', isa => 'xs:integer' );
        has 'boolean'      => ( is => 'rw', isa => 'xs:boolean' );
        has 'float'        => ( is => 'rw', isa => 'xs:float' );
        has 'double'       => ( is => 'rw', isa => 'xs:double' );
        has 'decimal'      => ( is => 'rw', isa => 'xs:decimal' );

        has 'integer_co'   => ( is => 'rw', isa => 'xs:integer', coerce => 1 );
        has 'float_co'     => ( is => 'rw', isa => 'xs:float', coerce => 1 );
        has 'double_co'    => ( is => 'rw', isa => 'xs:double', coerce => 1 );
        has 'decimal_co'   => ( is => 'rw', isa => 'xs:decimal', coerce => 1 );

        has 'duration'     => ( is => 'rw', isa => 'xs:duration' );
        has 'datetime'     => ( is => 'rw', isa => 'xs:dateTime' );
        has 'time'         => ( is => 'rw', isa => 'xs:time' );
        has 'date'         => ( is => 'rw', isa => 'xs:date' );
        has 'gYearMonth'   => ( is => 'rw', isa => 'xs:gYearMonth' );
        has 'gYear'        => ( is => 'rw', isa => 'xs:gYear' );
        has 'gMonthDay'    => ( is => 'rw', isa => 'xs:gMonthDay' );
        has 'gDay'         => ( is => 'rw', isa => 'xs:gDay' );
        has 'gMonth'       => ( is => 'rw', isa => 'xs:gMonth' );

        has 'duration_dt'     => ( is => 'rw', isa => 'xs:duration', coerce => 1 );
        has 'datetime_dt'     => ( is => 'rw', isa => 'xs:dateTime', coerce => 1 );
        has 'time_dt'         => ( is => 'rw', isa => 'xs:time', coerce => 1 );
        has 'date_dt'         => ( is => 'rw', isa => 'xs:date', coerce => 1 );
        has 'gYearMonth_dt'   => ( is => 'rw', isa => 'xs:gYearMonth', coerce => 1 );
        has 'gYear_dt'        => ( is => 'rw', isa => 'xs:gYear', coerce => 1 );
        has 'gMonthDay_dt'    => ( is => 'rw', isa => 'xs:gMonthDay', coerce => 1 );
        has 'gDay_dt'         => ( is => 'rw', isa => 'xs:gDay', coerce => 1 );
        has 'gMonth_dt'       => ( is => 'rw', isa => 'xs:gMonth', coerce => 1 );

        has 'base64Binary' => ( is => 'rw', isa => 'xs:base64Binary' );
        has 'base64Binary_io' => ( is => 'rw', isa => 'xs:base64Binary', coerce => 1 );

        has 'anyURI'       => ( is => 'rw', isa => 'xs:anyURI' );
        has 'anyURI_uri'       => ( is => 'rw', isa => 'xs:anyURI', coerce => 1 );

        has 'nonPositiveInteger' => ( is => 'rw', isa => 'xs:nonPositiveInteger' );
        has 'positiveInteger'    => ( is => 'rw', isa => 'xs:positiveInteger' );
        has 'nonNegativeInteger' => ( is => 'rw', isa => 'xs:nonNegativeInteger' );
        has 'negativeInteger'    => ( is => 'rw', isa => 'xs:negativeInteger' );

    Then, elsewhere:

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

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

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

    A wrapper around built-in Str.

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

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

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

  xs:positiveInteger
        has 'integer' => (
            is => 'rw',
            isa => 'xs:positiveInteger',
            coerce => 1,
        );

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

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

  xs:nonPositiveInteger
        has 'integer' => (
            is => 'rw',
            isa => 'xs:nonPositiveInteger',
            coerce => 1,
        );

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

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

  xs:negativeInteger
        has 'integer' => (
            is => 'rw',
            isa => 'xs:negativeInteger',
            coerce => 1,
        );

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

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

  xs:nonNegativeInteger
        has 'int' => ( is => 'rw', isa => 'xs:nonNegativeInteger' );

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

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

  xs:long
        has 'long' => ( is => 'rw', isa => 'xs:long' );

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

  xs:unsignedLong
        has 'long' => ( is => 'rw', isa => 'xs:unsignedLong' );

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

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

    A 32-bit integer. Represented natively.

  xs:unsignedInt
        has 'int' => ( is => 'rw', isa => 'xs:unsignedInt' );

    A 32-bit integer. Represented natively.

  xs:short
        has 'int' => ( is => 'rw', isa => 'xs:short' );

    A 16-bit integer. Represented natively.

  xs:unsignedShort
        has 'int' => ( is => 'rw', isa => 'xs:unsignedShort' );

    A 16-bit integer. Represented natively.

  xs:byte
        has 'int' => ( is => 'rw', isa => 'xs:byte' );

    An 8-bit integer. Represented natively.

  xs:unsignedByte
        has 'int' => ( is => 'rw', isa => 'xs:unsignedByte' );

    An 8-bit integer. Represented natively.

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

    A wrapper around built-in Bool.

  xs:float
        has 'float'        => ( is => 'rw', isa => 'xs:float' );

    A 64-bit Float. Represented as a Math::BigFloat object, but limited to
    the 64-bit (unsigned) range.

  xs:double
        has 'double'       => ( is => 'rw', isa => 'xs:double' );

    A 64-bit Float. Represented as a Math::BigFloat object, but limited to
    the 64-bit (unsigned) range. Set to coerce from Num.

  xs:decimal
        has 'decimal'      => ( is => 'rw', isa => 'xs:decimal' );

    A 64-bit Float. Represented as a Math::BigFloat object, but limited to
    the 64-bit (unsigned) range. Set to coerce from Num.

  xs:duration
        has 'duration'     => ( is => 'rw', isa => 'xs:duration' );
        has 'duration_dt'  => ( is => 'rw', isa => 'xs:duration', coerce => 1 );

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

  xs:datetime
        has 'datetime'    => ( is => 'rw', isa => 'xs:dateTime' );
        has 'datetime_dt' => ( is => 'rw', isa => 'xs:dateTime', coerce => 1 );

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

  xs:time
        has 'time'    => ( is => 'rw', isa => 'xs:time' );
        has 'time_dt' => ( is => 'rw', isa => 'xs:time', coerce => 1 );

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

  xs:date
        has 'date'     => ( is => 'rw', isa => 'xs:date' );
        has 'date_dt'  => ( is => 'rw', isa => 'xs:date', coerce => 1 );

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

  xs:gYearMonth
        has 'gYearMonth'    => ( is => 'rw', isa => 'xs:gYearMonth' );
        has 'gYearMonth_dt' => ( is => 'rw', isa => 'xs:gYearMonth', coerce => 1 );

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

  xs:gYear
        has 'gYear'    => ( is => 'rw', isa => 'xs:gYear' );
        has 'gYear_dt' => ( is => 'rw', isa => 'xs:gYear', coerce => 1 );

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

  xs:gMonthDay
        has 'gMonthDay'        => ( is => 'rw', isa => 'xs:gMonthDay' );
        has 'gMonthDay_dt' => ( is => 'rw', isa => 'xs:gMonthDay', coerce => 1 );

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

  xs:gDay
        has 'gDay'         => ( is => 'rw', isa => 'xs:gDay' );
        has 'gDay_dt_int'  => ( is => 'rw', isa => 'xs:gDay', coerce => 1 );

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

  xs:gMonth
        has 'gMonth'        => ( is => 'rw', isa => 'xs:gMonth', coerce => 1 );
        has 'gMonth_dt_int' => ( is => 'rw', isa => 'xs:gMonth', coerce => 1 );

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

  xs:base64Binary
        has 'base64Binary'    => ( is => 'rw', isa => 'xs:base64Binary' );
        has 'base64Binary_io' => ( is => 'rw', isa => 'xs:base64Binary', 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.

  xs:anyURI
        has 'anyURI'     => ( is => 'rw', isa => 'xs:anyURI' );
        has 'anyURI_uri' => ( is => 'rw', isa => 'xs:anyURI', coerce => 1 );

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

  xs:nonPositiveInteger
        has 'nonPositiveInteger' => ( is => 'rw', isa => 'xs:nonPositiveInteger' );

    A wrapper around built-in Int.

  xs:negativeInteger
        has 'negativeInteger' => ( is => 'rw', isa => 'xs:negativeInteger' );

    A wrapper around built-in Int.

  xs:nonNegativeInteger
        has 'nonNegativeInteger' => ( is => 'rw', isa => 'xs:nonNegativeInteger' );

    A wrapper around built-in Int.

  xs:positiveInteger
        has 'positiveInteger'    => ( is => 'rw', isa => 'xs:positiveInteger' );

    A wrapper around built-in Int.

SEE ALSO
    *   Enable attributes coercion automatically with

        MooseX::AlwaysCoerce

AUTHOR
    Alex J. G. Burzyński, "<ajgb at cpan.org>"

BUGS
    Please report any bugs or feature requests to
    "bug-moosex-types-xmlschema at rt.cpan.org", or through the web
    interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MooseX-Types-XMLSchema>.
    I will be notified, and then you'll automatically be notified of
    progress on your bug as I make changes.

COPYRIGHT & LICENSE
    Copyright 2009-2012 Alex J. G. Burzyński.

    This program is free software; you can redistribute it and/or modify it
    under the terms of either: the GNU General Public License as published
    by the Free Software Foundation; or the Artistic License.

    See http://dev.perl.org/licenses/ for more information.

