The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package Business::eWAY::RapidAPI::Role::Parser;
$Business::eWAY::RapidAPI::Role::Parser::VERSION = '0.06';
use Moo::Role;

use JSON -convert_blessed_universally;
use XML::Simple;

sub Obj2ARRAY {
    my ( $self, $obj ) = @_;

    my $json = JSON->new();
    $json->pretty();
    $json->allow_blessed()->convert_blessed();
    return $json->decode( $json->encode($obj) );
}

sub Obj2JSON {
    my ( $self, $obj ) = @_;

    my $json = JSON->new();
    $json->pretty();
    $json->allow_blessed()->convert_blessed();
    return $json->encode($obj);
}

sub JSON2Obj {
    my ( $self, $obj ) = @_;

    my $json = new JSON();
    $json->allow_blessed()->convert_blessed();
    return $json->decode($obj);
}

sub Obj2XML {
    my ( $self, $obj, $reqname ) = @_;

    my $xs = XML::Simple->new(
        GroupTags     => { 'Items' => 'LineItem', 'Options' => 'Option' },
        SuppressEmpty => 1
    );
    return $xs->XMLout(
        $obj,
        KeepRoot => 0,
        XMLDecl  => 1,
        NoAttr   => 1,
        RootName => $reqname
    );
}

sub XML2Obj {
    my ( $self, $obj ) = @_;

    my $xs = XML::Simple->new( SuppressEmpty => 1 );

    return $xs->XMLin(
        $obj,
        ForceArray   => [ 'Items', 'Options' ],
        KeepRoot     => 0,
        ForceContent => 0
    );
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Business::eWAY::RapidAPI::Role::Parser

=head1 VERSION

version 0.06

=head1 AUTHOR

Fayland Lam <fayland@gmail.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Fayland Lam.

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

=cut