package Result;


use strict;
use warnings;
use Carp;
use Data::Dumper;


# It is a good idea to use unix style exit codes. Exit codes != 0 are bad.
# $r = new Result(0);
# if ($r->Code) {
#     printf "There is an error: %s\n", $r->Message;
# } else {
#     print "All good!\n";
# }
sub new ($@) {
    my $class = shift;
    my ($code, $result_data, $namespace, $message, $stack_trace) = @_;
    my $this = {};
    $this->{Code}      = $code;
    $this->{Result}    = $result_data;
    $this->{Namespace} = $namespace || (caller(1))[3];
    $this->{Message}   = $message;
    $this->{Stack}     = $stack_trace || Carp::longmess();

    chomp($this->{Stack});

    bless $this, $class;
    return $this;
}

# Accessors
sub asString  { print Dumper $_[0] }
sub Code      { $_[0]->{Code}      }
sub Result    { $_[0]->{Result}    }
sub Namespace { $_[0]->{Namespace} }
sub Message   { $_[0]->{Message}   }
sub Stack     { $_[0]->{Stack}     }


1;