Class: Temporal::FailureConverter::Basic

Inherits:
Base
  • Object
show all
Defined in:
lib/temporal/failure_converter/basic.rb

Instance Method Summary collapse

Constructor Details

#initialize(encode_common_attributes: false) ⇒ Basic

Returns a new instance of Basic.



11
12
13
14
15
# File 'lib/temporal/failure_converter/basic.rb', line 11

def initialize(encode_common_attributes: false)
  super()

  @encode_common_attributes = encode_common_attributes
end

Instance Method Details

#from_failure(failure, payload_converter) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/temporal/failure_converter/basic.rb', line 58

def from_failure(failure, payload_converter)
  failure = apply_from_encoded_attributes(failure, payload_converter)
  cause = failure.cause ? from_failure(failure.cause, payload_converter) : nil

  error =
    if failure.application_failure_info
      from_application_failure(failure, failure.application_failure_info, cause, payload_converter)
    elsif failure.timeout_failure_info
      from_timeout_failure(failure, failure.timeout_failure_info, cause, payload_converter)
    elsif failure.canceled_failure_info
      from_cancelled_failure(failure, failure.canceled_failure_info, cause, payload_converter)
    elsif failure.terminated_failure_info
      from_terminated_failure(failure, failure.terminated_failure_info, cause, payload_converter)
    elsif failure.server_failure_info
      from_server_failure(failure, failure.server_failure_info, cause, payload_converter)
    elsif failure.reset_workflow_failure_info
      from_reset_workflow_failure(failure, failure.reset_workflow_failure_info, cause, payload_converter)
    elsif failure.activity_failure_info
      from_activity_failure(failure, failure.activity_failure_info, cause, payload_converter)
    elsif failure.child_workflow_execution_failure_info
      from_child_workflow_execution_failure(
        failure,
        failure.child_workflow_execution_failure_info,
        cause,
        payload_converter,
      )
    else
      from_generic_failure(failure, cause, payload_converter)
    end

  unless failure.stack_trace.empty?
    error.set_backtrace(failure.stack_trace.split("\n"))
  end

  error
end

#to_failure(error, payload_converter) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/temporal/failure_converter/basic.rb', line 17

def to_failure(error, payload_converter)
  return error.raw if error.is_a?(Temporal::Error::Failure) && error.raw

  failure =
    case error
    when Temporal::Error::ApplicationError
      to_application_failure(error, payload_converter)
    when Temporal::Error::TimeoutError
      to_timeout_failure(error, payload_converter)
    when Temporal::Error::CancelledError
      to_cancelled_failure(error, payload_converter)
    when Temporal::Error::TerminatedError
      to_terminated_failure(error, payload_converter)
    when Temporal::Error::ServerError
      to_server_failure(error, payload_converter)
    when Temporal::Error::ResetWorkflowError
      to_reset_workflow_failure(error, payload_converter)
    when Temporal::Error::ActivityError
      to_activity_failure(error, payload_converter)
    when Temporal::Error::ChildWorkflowError
      to_child_workflow_execution_failure(error, payload_converter)
    else
      to_generic_failure(error, payload_converter)
    end

  failure.message = error.message
  failure.stack_trace = error.backtrace&.join("\n") || ''
  failure.cause = to_failure(error.cause, payload_converter) if error.cause

  if encode_common_attributes?
    failure.encoded_attributes = payload_converter.to_payload(
      'message' => failure.message,
      'stack_trace' => failure.stack_trace,
    )
    failure.message = 'Encoded failure'
    failure.stack_trace = ''
  end

  failure
end