| JSON-RPC-Common documentation | Contained in the JSON-RPC-Common distribution. |
JSON::RPC::Common::Procedure::Return::Error - Base class for JSON-RPC errors
version 0.10
use JSON::RPC::Common::Procedure::Return::Error;
my $error = JSON::RPC::Common::Procedure::Return::Error->new(
message => "foo",
code => "bah",
);
# or construct a return with an error from a call:
my $return = $call->return_error("foo");
$return->error->message;
This is a base class for all version specific error implementations.
These are the three common JSON-RPC error fields. In JSON-RPC 1.1 data is
known as error, and in 1.0 none of this is specced at all.
See the version specific subclasses for various behaviors.
Code is an integer, and message is a string.
Convenience constructor used by return_error in JSON::RPC::Common::Procedure::Call.
Will return an object if that's the argument, and otherwise construct an error.
Create an error object from JSON data (not text).
In order to maximize compatibility this inflation routine is very liberal in what it accepts.
Yuval Kogman <nothingmuch@woobling.org>
This software is copyright (c) 2011 by Yuval Kogman.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| JSON-RPC-Common documentation | Contained in the JSON-RPC-Common distribution. |
#!/usr/bin/perl package JSON::RPC::Common::Procedure::Return::Error; BEGIN { $JSON::RPC::Common::Procedure::Return::Error::VERSION = '0.10'; } use Moose; # ABSTRACT: Base class for JSON-RPC errors use JSON::RPC::Common::TypeConstraints qw(JSONValue); use namespace::clean -except => [qw(meta)]; sub new_dwim { my ( $class, @args ) = @_; if ( @args == 1 ) { if ( blessed($args[0]) and $args[0]->isa($class) ) { return $args[0]; } } $class->inflate(@args); } sub inflate { my ( $class, @args ) = @_; my $data; if (@args == 1 and defined $args[0] and (ref($args[0])||'') eq 'HASH') { $data = { %{ $args[0] } }; } else { if ( @args % 2 == 1 ) { unshift @args, "message"; } $data = { @args }; } my %constructor_args; foreach my $arg ( qw(message code) ) { $constructor_args{$arg} = delete $data->{$arg} if exists $data->{$arg}; } if ( keys %$data ) { $constructor_args{data} = (join(" ", keys %$data) eq 'data' ? $data->{data} : $data); } $class->new(%constructor_args); } has data => ( isa => JSONValue, is => "rw", predicate => "has_data", ); has message => ( isa => "Str", is => "rw", predicate => "has_message", ); has code => ( isa => "Int", is => "rw", predicate => "has_code", ); # FIXME delegate to a dictionary sub http_status { 500 } __PACKAGE__->meta->make_immutable(); __PACKAGE__ __END__