Business-UPS-Tracking

 view release on metacpan or  search on metacpan

lib/Business/UPS/Tracking/Utils.pm  view on Meta::CPAN

# ============================================================================
package Business::UPS::Tracking::Utils;
# ============================================================================
use utf8;
use 5.0100;

use strict;
use warnings;

use Try::Tiny;
use Business::UPS::Tracking::Exception;
use Moose::Util::TypeConstraints;
use Business::UPS::Tracking;
use MooseX::Getopt::OptionTypeMap;
use Business::UPS::Tracking::Meta::Attribute::Trait::Printable;
use Encode;

=encoding utf8

=head1 NAME

Business::UPS::Tracking::Utils - Utility functions

=head1 SYNOPSIS

 use Business::UPS::Tracking::Utils;

=head1 DESCRIPTION

This module provides some basic utility functions for
L<Business::UPS::Tracking> and defines some Moose type constraints and
coercions.

=head1 FUNCTIONS

=cut

subtype 'Business::UPS::Tracking::Type::XMLDocument'
    => as class_type('XML::LibXML::Document');

coerce 'Business::UPS::Tracking::Type::XMLDocument'
    => from 'Str'
    => via {
        my $xml = $_;
        $xml = decode("iso-8859-1", $xml);

        my $parser = XML::LibXML->new(
            #encoding    => 'iso-8859-15'
        );
        return try {
            return $parser->parse_string($xml);
        } catch {
            Business::UPS::Tracking::X::XML->throw(
                error   => $_ || 'Unknown error parsing xml document',
                xml     => $xml,
            );
        }
    };

subtype 'Business::UPS::Tracking::Type::Date'
    => as class_type('DateTime');

subtype 'Business::UPS::Tracking::Type::DateStr'
    => as 'Str'
    => where {
        m/^
            (19|20)\d\d #year
            (0[1-9]|1[012]) #month
            (3[01]|[12]\d|0[1-9]) #day
        $/x;



( run in 0.518 second using v1.01-cache-2.11-cpan-39bf76dae61 )