package WebService::Hexonet::Connector::ResponseTemplate; use 5.026_000; use strict; use warnings; use WebService::Hexonet::Connector::ResponseParser; use version 0.9917; our $VERSION = version->declare('v2.2.5'); sub new { my ( $class, $raw ) = @_; my $self = {}; if ( !defined $raw || length $raw == 0 ) { $raw = "[RESPONSE]\r\nCODE=423\r\nDESCRIPTION=Empty API response. Probably unreachable API end point\r\nEOF\r\n"; } $self->{raw} = $raw; $self->{hash} = WebService::Hexonet::Connector::ResponseParser::parse($raw); return bless $self, $class; } sub getCode { my $self = shift; return ( $self->{hash}->{CODE} + 0 ); } sub getDescription { my $self = shift; return $self->{hash}->{DESCRIPTION}; } sub getPlain { my $self = shift; return $self->{raw}; } sub getQueuetime { my $self = shift; if ( defined $self->{hash}->{QUEUETIME} ) { return ( $self->{hash}->{QUEUETIME} + 0.00 ); } return 0.00; } sub getHash { my $self = shift; return $self->{hash}; } sub getRuntime { my $self = shift; if ( defined $self->{hash}->{RUNTIME} ) { return ( $self->{hash}->{RUNTIME} + 0.00 ); } return 0.00; } sub isError { my $self = shift; my $first = substr $self->{hash}->{CODE}, 0, 1; return ( $first eq '5' ); } sub isSuccess { my $self = shift; my $first = substr $self->{hash}->{CODE}, 0, 1; return ( $first eq '2' ); } sub isTmpError { my $self = shift; my $first = substr $self->{hash}->{CODE}, 0, 1; return ( $first eq '4' ); } sub isPending { my $self = shift; if ( defined $self->{hash}->{PENDING} ) { return int( $self->{hash}->{PENDING} ); } return 0; } 1; __END__ =pod =head1 NAME WebService::Hexonet::Connector::ResponseTemplate - Library that provides basic functionality to access API response data. =head1 SYNOPSIS This module is internally used by the WebService::Hexonet::Connector::Response module as described below. To be used in the way: # specify the API plain-text response (this is just an example that won't fit to the command above) $plain = "[RESPONSE]\r\nCODE=200\r\nDESCRIPTION=Command completed successfully\r\nEOF\r\n"; # create a new instance $r = WebService::Hexonet::Connector::ResponseTemplate->new($plain); The difference of this library and the Response library is simply that this library =over =item * does not provide further data access possibilities based on Column and Record library =item * does not require an API command to be specified in constructor =back =head1 DESCRIPTION HEXONET Backend API always responds in plain-text format that needs to get parsed into a useful data structure. This module manages all this: parsing data into hash format. It provides different methods to access the data to fit your needs. It is used as base class for L<WebService::Hexonet::Connector::Response|WebService::Hexonet::Connector::Response>. We internally use this module also in our automated tests to play with hardcoded API responses. =head2 Methods =over =item C<new( $plain )> Returns a new L<WebService::Hexonet::Connector::ResponseTemplate|WebService::Hexonet::Connector::ResponseTemplate> instance. Specify the plain-text API response as $plain. =item C<getCode> Returns the API response code as int. =item C<getDescription> Returns the API response description as string. =item C<getPlain> Returns the plain-text API response as string. =item C<getQueuetime> Returns the Queuetime of the API response as decimal. =item C<getHash> Returns the API response as Hash. =item C<getRuntime> Returns the Runtime of the API response code as decimal. =item C<isError> Checks if the API response code represents an error case. 500 <= Code <= 599 Returns boolean 0 or 1. =item C<isSuccess> Checks if the API response code represents a success case. 200 <= Code <= 299 Returns boolean 0 or 1. =item C<isTmpError> Checks if the API response code represents a temporary error case. 400 <= Code <= 499 Returns boolean 0 or 1. =item C<isPending> Checks if current operation is returned as pending. Returns boolean 0 or 1. =back =head1 LICENSE AND COPYRIGHT This program is licensed under the L<MIT License|https://raw.githubusercontent.com/hexonet/perl-sdk/master/LICENSE>. =head1 AUTHOR L<HEXONET GmbH|https://www.hexonet.net> =cut