Module: Temporalio::Internal::ProtoUtils
- Defined in:
- lib/temporalio/internal/proto_utils.rb
Defined Under Namespace
Classes: LazyMemo, LazySearchAttributes
Class Method Summary
collapse
-
.assert_non_reserved_name(name) ⇒ Object
-
.convert_from_payload_array(converter, payloads) ⇒ Object
-
.convert_to_payload_array(converter, values) ⇒ Object
-
.duration_to_seconds(duration) ⇒ Object
-
.enum_to_int(enum_mod, enum_val, zero_means_nil: false) ⇒ Object
-
.from_user_metadata(metadata, converter) ⇒ Object
-
.headers_from_proto(headers, converter) ⇒ Object
-
.headers_from_proto_map(headers, converter) ⇒ Object
-
.headers_to_proto(headers, converter) ⇒ Object
-
.headers_to_proto_hash(headers, converter) ⇒ Object
-
.memo_from_proto(memo, converter) ⇒ Object
-
.memo_to_proto(hash, converter) ⇒ Object
-
.memo_to_proto_hash(hash, converter) ⇒ Object
-
.reserved_name?(name) ⇒ Boolean
-
.seconds_to_duration(seconds_numeric) ⇒ Object
-
.string_or(str, default = nil) ⇒ Object
-
.time_to_timestamp(time) ⇒ Object
-
.timestamp_to_time(timestamp) ⇒ Object
-
.to_user_metadata(summary, details, converter) ⇒ Object
Class Method Details
.assert_non_reserved_name(name) ⇒ Object
109
110
111
112
113
114
115
116
|
# File 'lib/temporalio/internal/proto_utils.rb', line 109
def self.assert_non_reserved_name(name)
name = name&.to_s return unless name
raise "'#{name}' cannot start with '__temporal_'" if name.start_with?('__temporal_')
raise "'#{name}' name invalid" if name == '__stack_trace' || name == '__enhanced_stack_trace'
end
|
.convert_from_payload_array(converter, payloads) ⇒ Object
97
98
99
100
101
|
# File 'lib/temporalio/internal/proto_utils.rb', line 97
def self.convert_from_payload_array(converter, payloads)
return [] if payloads.empty?
converter.from_payloads(Api::Common::V1::Payloads.new(payloads:))
end
|
.convert_to_payload_array(converter, values) ⇒ Object
103
104
105
106
107
|
# File 'lib/temporalio/internal/proto_utils.rb', line 103
def self.convert_to_payload_array(converter, values)
return [] if values.empty?
converter.to_payloads(values).payloads.to_ary
end
|
.duration_to_seconds(duration) ⇒ Object
16
17
18
19
20
21
22
23
24
|
# File 'lib/temporalio/internal/proto_utils.rb', line 16
def self.duration_to_seconds(duration)
return nil if duration.nil?
(duration.seconds + duration.nanos.quo(1_000_000_000)).to_f
end
|
.enum_to_int(enum_mod, enum_val, zero_means_nil: false) ⇒ Object
88
89
90
91
92
93
94
95
|
# File 'lib/temporalio/internal/proto_utils.rb', line 88
def self.enum_to_int(enum_mod, enum_val, zero_means_nil: false)
enum_val = enum_mod.resolve(enum_val) || raise('Unexpected missing symbol') if enum_val.is_a?(Symbol)
enum_val = nil if zero_means_nil && enum_val.zero?
enum_val
end
|
134
135
136
137
138
139
|
# File 'lib/temporalio/internal/proto_utils.rb', line 134
def self.from_user_metadata(metadata, converter)
[
(converter.from_payload(metadata.summary) if metadata&.summary), (converter.from_payload(metadata.details) if metadata&.details) ]
end
|
71
72
73
|
# File 'lib/temporalio/internal/proto_utils.rb', line 71
def self.(, converter)
(&.fields, converter)
end
|
75
76
77
78
79
80
81
82
|
# File 'lib/temporalio/internal/proto_utils.rb', line 75
def self.(, converter)
return nil if .nil? || .size.zero?
.each_with_object({}) do |(key, val), h| h[key] = converter.from_payload(val)
end
end
|
59
60
61
62
63
|
# File 'lib/temporalio/internal/proto_utils.rb', line 59
def self.(, converter)
return nil if .nil? || .empty?
Api::Common::V1::Header.new(fields: (, converter))
end
|
65
66
67
68
69
|
# File 'lib/temporalio/internal/proto_utils.rb', line 65
def self.(, converter)
return nil if .nil? || .empty?
.transform_values { |val| converter.to_payload(val) }
end
|
.memo_from_proto(memo, converter) ⇒ Object
53
54
55
56
57
|
# File 'lib/temporalio/internal/proto_utils.rb', line 53
def self.memo_from_proto(memo, converter)
return nil if memo.nil? || memo.fields.size.zero?
memo.fields.each_with_object({}) { |(key, val), h| h[key] = converter.from_payload(val) } end
|
.memo_to_proto(hash, converter) ⇒ Object
41
42
43
44
45
|
# File 'lib/temporalio/internal/proto_utils.rb', line 41
def self.memo_to_proto(hash, converter)
return nil if hash.nil? || hash.empty?
Api::Common::V1::Memo.new(fields: memo_to_proto_hash(hash, converter))
end
|
.memo_to_proto_hash(hash, converter) ⇒ Object
47
48
49
50
51
|
# File 'lib/temporalio/internal/proto_utils.rb', line 47
def self.memo_to_proto_hash(hash, converter)
return nil if hash.nil? || hash.empty?
hash.transform_keys(&:to_s).transform_values { |val| converter.to_payload(val) }
end
|
.reserved_name?(name) ⇒ Boolean
118
119
120
121
122
123
|
# File 'lib/temporalio/internal/proto_utils.rb', line 118
def self.reserved_name?(name)
name = name&.to_s return false unless name
name.start_with?('__temporal_') || name == '__stack_trace' || name == '__enhanced_stack_trace'
end
|
.seconds_to_duration(seconds_numeric) ⇒ Object
8
9
10
11
12
13
14
|
# File 'lib/temporalio/internal/proto_utils.rb', line 8
def self.seconds_to_duration(seconds_numeric)
return nil if seconds_numeric.nil?
seconds = seconds_numeric.to_i
nanos = ((seconds_numeric - seconds) * 1_000_000_000).round
Google::Protobuf::Duration.new(seconds:, nanos:)
end
|
.string_or(str, default = nil) ⇒ Object
84
85
86
|
# File 'lib/temporalio/internal/proto_utils.rb', line 84
def self.string_or(str, default = nil)
str && !str.empty? ? str : default
end
|
.time_to_timestamp(time) ⇒ Object
26
27
28
29
30
|
# File 'lib/temporalio/internal/proto_utils.rb', line 26
def self.time_to_timestamp(time)
return nil if time.nil?
Google::Protobuf::Timestamp.from_time(time)
end
|
.timestamp_to_time(timestamp) ⇒ Object
32
33
34
35
36
37
38
39
|
# File 'lib/temporalio/internal/proto_utils.rb', line 32
def self.timestamp_to_time(timestamp)
return nil if timestamp.nil?
Time.at(timestamp.seconds, timestamp.nanos, :nanosecond, in: 'UTC')
end
|
125
126
127
128
129
130
131
132
|
# File 'lib/temporalio/internal/proto_utils.rb', line 125
def self.to_user_metadata(summary, details, converter)
return nil if (!summary || summary.empty?) && (!details || details.empty?)
metadata = Temporalio::Api::Sdk::V1::UserMetadata.new
metadata.summary = converter.to_payload(summary) if summary && !summary.empty?
metadata.details = converter.to_payload(details) if details && !details.empty?
metadata
end
|