=begin

    This file is part of the Arachni-RPC project and may be subject to
    redistribution and commercial restrictions. Please see the Arachni-RPC
    web site for more information on licensing and terms of use.

=end

module Arachni
module RPC

# Represents an RPC response.
#
# It's here only for formalization purposes, it's not actually sent over the wire.
#
# What is sent is a hash generated by {#prepare_for_tx} which is in the form of:
#
#    {
#        # result of the RPC call
#        'obj' => object
#    }
#
# @author Tasos "Zapotek" Laskos <tasos.laskos@arachni-scanner.com>
class Response < Message

    # @return   [Object]
    #   Return object of the {Request#message}.
    attr_accessor :obj

    # @return   [Hash]
    #
    #       {
    #           "name" => "Trying to access non-existent object 'blah'.",
    #           "backtrace" => [
    #               [0] "/home/zapotek/workspace/arachni-rpc/lib/arachni/rpc/server.rb:285:in `call'",
    #               [1] "/home/zapotek/workspace/arachni-rpc/lib/arachni/rpc/server.rb:85:in `block in receive_object'",
    #           ],
    #           "type" => "InvalidObject"
    #       }
    #
    #   For all available exception types look at {Exceptions}.
    attr_accessor :exception

    def exception?
        !!exception
    end

    def async?
        !!@async
    end

    def async!
        @async = true
    end

    private

    def transmit?( attr )
        ![:@async].include?( attr )
    end

end

end
end
