class Appsignal::Extension::Jruby::Transaction

rubocop:disable Metrics/ClassLength

def complete

def complete
  Extension.appsignal_complete_transaction(pointer)
end

def finish(gc_duration_ms)

def finish(gc_duration_ms)
  Extension.appsignal_finish_transaction(pointer, gc_duration_ms)
end

def finish_event(name, title, body, body_format, gc_duration_ms)

def finish_event(name, title, body, body_format, gc_duration_ms)
  case body
  when String
    method = :appsignal_finish_event
    body_arg = make_appsignal_string(body)
  when Data
    method = :appsignal_finish_event_data
    body_arg = body.pointer
  else
    raise ArgumentError,
      "body argument should be a String or Appsignal::Extension::Data"
  end
  Extension.public_send(
    method,
    pointer,
    make_appsignal_string(name),
    make_appsignal_string(title),
    body_arg,
    body_format,
    gc_duration_ms
  )
end

def initialize(pointer)

def initialize(pointer)
  @pointer = FFI::AutoPointer.new(
    pointer,
    Extension.method(:appsignal_free_transaction)
  )
end

def record_event(name, title, body, body_format, duration, gc_duration_ms) # rubocop:disable Metrics/ParameterLists

rubocop:disable Metrics/ParameterLists
def record_event(name, title, body, body_format, duration, gc_duration_ms) # rubocop:disable Metrics/ParameterLists
  case body
  when String
    method = :appsignal_record_event
    body_arg = make_appsignal_string(body)
  when Data
    method = :appsignal_record_event_data
    body_arg = body.pointer
  else
    raise ArgumentError,
      "body argument should be a String or Appsignal::Extension::Data"
  end
  Extension.public_send(
    method,
    pointer,
    make_appsignal_string(name),
    make_appsignal_string(title),
    body_arg,
    body_format,
    duration,
    gc_duration_ms
  )
end

def set_action(action_name) # rubocop:disable Naming/AccessorMethodName

rubocop:disable Naming/AccessorMethodName
def set_action(action_name) # rubocop:disable Naming/AccessorMethodName
  Extension.appsignal_set_transaction_action(
    pointer,
    make_appsignal_string(action_name)
  )
end

def set_error(name, message, backtrace)

def set_error(name, message, backtrace)
  Extension.appsignal_set_transaction_error(
    pointer,
    make_appsignal_string(name),
    make_appsignal_string(message),
    backtrace.pointer
  )
end

def set_metadata(key, value)

def set_metadata(key, value)
  Extension.appsignal_set_transaction_metadata(
    pointer,
    make_appsignal_string(key),
    make_appsignal_string(value)
  )
end

def set_namespace(namespace) # rubocop:disable Naming/AccessorMethodName

rubocop:disable Naming/AccessorMethodName
def set_namespace(namespace) # rubocop:disable Naming/AccessorMethodName
  Extension.appsignal_set_transaction_namespace(
    pointer,
    make_appsignal_string(namespace)
  )
end

def set_queue_start(time) # rubocop:disable Naming/AccessorMethodName

rubocop:disable Naming/AccessorMethodName
def set_queue_start(time) # rubocop:disable Naming/AccessorMethodName
  Extension.appsignal_set_transaction_queue_start(pointer, time)
end

def set_sample_data(key, payload)

def set_sample_data(key, payload)
  Extension.appsignal_set_transaction_sample_data(
    pointer,
    make_appsignal_string(key),
    payload.pointer
  )
end

def start_event(gc_duration_ms)

def start_event(gc_duration_ms)
  Extension.appsignal_start_event(pointer, gc_duration_ms)
end

def to_json

def to_json
  json = Extension.appsignal_transaction_to_json(pointer)
  make_ruby_string(json) if json[:len] > 0
end