Class: Temporalio::FailureConverter::Basic Private

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

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

A default implementation of a FailureConverter.

Use DataConverter for the set of helper method for interaction with converters.

Instance Method Summary collapse

Constructor Details

#initialize(encode_common_attributes: false) ⇒ Basic

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Basic.



16
17
18
19
20
# File 'lib/temporalio/failure_converter/basic.rb', line 16

def initialize(encode_common_attributes: false)
  super()

  @encode_common_attributes = encode_common_attributes
end

Instance Method Details

#from_failure(failure, payload_converter) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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
94
95
96
97
98
99
# File 'lib/temporalio/failure_converter/basic.rb', line 64

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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
57
58
59
60
61
62
# File 'lib/temporalio/failure_converter/basic.rb', line 22

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

  failure =
    case error
    when Temporalio::Error::ApplicationError
      to_application_failure(error, payload_converter)
    when Temporalio::Error::TimeoutError
      to_timeout_failure(error, payload_converter)
    when Temporalio::Error::CancelledError
      to_cancelled_failure(error, payload_converter)
    when Temporalio::Error::TerminatedError
      to_terminated_failure(error, payload_converter)
    when Temporalio::Error::ServerError
      to_server_failure(error, payload_converter)
    when Temporalio::Error::ResetWorkflowError
      to_reset_workflow_failure(error, payload_converter)
    when Temporalio::Error::ActivityError
      to_activity_failure(error, payload_converter)
    when Temporalio::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") || ''
  # RBS: StandardError fallback is only needed to satisfy steep - https://github.com/soutaro/steep/issues/477
  failure.cause = to_failure(error.cause || StandardError.new, 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