restate-sdk 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: false
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Restate
@@ -11,7 +11,6 @@ module Restate
11
11
  # end
12
12
  # end
13
13
  class Service
14
- extend T::Sig
15
14
  extend ServiceDSL
16
15
 
17
16
  # Register a handler method on this service.
@@ -27,7 +26,7 @@ module Restate
27
26
  end
28
27
  return method_name unless method_name.is_a?(Symbol)
29
28
 
30
- _register_handler(method_name, **T.unsafe({ kind: nil, **opts }))
29
+ _register_handler(method_name, kind: nil, **opts)
31
30
  end
32
31
 
33
32
  # Returns a call proxy for fluent durable calls to this service.
@@ -57,7 +57,7 @@ module Restate
57
57
  # end
58
58
  # end
59
59
  def state(name, default: nil, serde: nil) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
60
- unless T.unsafe(self).respond_to?(:_service_kind) && %w[object workflow].include?(T.unsafe(self)._service_kind)
60
+ unless respond_to?(:_service_kind) && %w[object workflow].include?(_service_kind)
61
61
  Kernel.raise ArgumentError, 'state declarations are only available on VirtualObject and Workflow'
62
62
  end
63
63
 
@@ -68,7 +68,7 @@ module Restate
68
68
  state_default = default
69
69
 
70
70
  # Getter: reads from durable state, returns default if unset
71
- T.unsafe(self).define_method(name) do
71
+ define_method(name) do
72
72
  ctx = Thread.current[:restate_context]
73
73
  Kernel.raise 'Not inside a Restate handler' unless ctx
74
74
 
@@ -77,7 +77,7 @@ module Restate
77
77
  end
78
78
 
79
79
  # Setter: writes to durable state
80
- T.unsafe(self).define_method(:"#{name}=") do |value|
80
+ define_method(:"#{name}=") do |value|
81
81
  ctx = Thread.current[:restate_context]
82
82
  Kernel.raise 'Not inside a Restate handler' unless ctx
83
83
 
@@ -89,7 +89,7 @@ module Restate
89
89
  end
90
90
 
91
91
  # Clear: removes the state entry
92
- T.unsafe(self).define_method(:"clear_#{name}") do
92
+ define_method(:"clear_#{name}") do
93
93
  ctx = Thread.current[:restate_context]
94
94
  Kernel.raise 'Not inside a Restate handler' unless ctx
95
95
 
@@ -105,7 +105,7 @@ module Restate
105
105
  if name
106
106
  @_service_name = name
107
107
  else
108
- @_service_name || T.unsafe(self).name&.split('::')&.last
108
+ @_service_name ||= self.name&.split('::')&.last # rubocop:disable Naming/MemoizedInstanceVariableName
109
109
  end
110
110
  end
111
111
 
@@ -199,7 +199,7 @@ module Restate
199
199
  #
200
200
  # @return [ServiceTag]
201
201
  def service_tag
202
- ServiceTag.new(kind: T.unsafe(self)._service_kind, name: service_name,
202
+ ServiceTag.new(kind: _service_kind, name: service_name,
203
203
  description: @_description, metadata: @_metadata)
204
204
  end
205
205
 
@@ -259,7 +259,7 @@ module Restate
259
259
  def _build_handlers # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
260
260
  tag = service_tag
261
261
  result = {}
262
- instance = T.unsafe(self).allocate
262
+ instance = allocate
263
263
 
264
264
  @_handler_registry.each do |name, meta| # rubocop:disable Metrics/BlockLength
265
265
  input_serde = Serde.resolve(meta[:input])
@@ -272,7 +272,7 @@ module Restate
272
272
  output_serde: output_serde
273
273
  )
274
274
 
275
- um = T.unsafe(self).instance_method(name)
275
+ um = instance_method(name)
276
276
  arity = um.arity.abs
277
277
  unless [0, 1].include?(arity)
278
278
  Kernel.raise ArgumentError, "handler '#{name}' must accept 0 or 1 parameters ([input]), got #{arity}"
@@ -16,9 +16,6 @@ module Restate
16
16
  #
17
17
  # @!visibility private
18
18
  class ServiceCallProxy
19
- extend T::Sig
20
-
21
- sig { params(service_class: T.untyped, key: T.nilable(String), call_method: Symbol).void }
22
19
  def initialize(service_class, key: nil, call_method: :service_call)
23
20
  @service_class = service_class
24
21
  @key = key
@@ -35,7 +32,7 @@ module Restate
35
32
  end
36
33
 
37
34
  def respond_to_missing?(method_name, include_private = false)
38
- (@service_class.respond_to?(:handlers) && T.unsafe(@service_class).handlers.key?(method_name.to_s)) || super
35
+ (@service_class.respond_to?(:handlers) && @service_class.handlers.key?(method_name.to_s)) || super
39
36
  end
40
37
  end
41
38
 
@@ -52,14 +49,6 @@ module Restate
52
49
  #
53
50
  # @!visibility private
54
51
  class ServiceSendProxy
55
- extend T::Sig
56
-
57
- sig do
58
- params(
59
- service_class: T.untyped, key: T.nilable(String),
60
- send_method: Symbol, delay: T.nilable(Numeric)
61
- ).void
62
- end
63
52
  def initialize(service_class, key: nil, send_method: :service_send, delay: nil)
64
53
  @service_class = service_class
65
54
  @key = key
@@ -78,7 +67,7 @@ module Restate
78
67
  end
79
68
 
80
69
  def respond_to_missing?(method_name, include_private = false)
81
- (@service_class.respond_to?(:handlers) && T.unsafe(@service_class).handlers.key?(method_name.to_s)) || super
70
+ (@service_class.respond_to?(:handlers) && @service_class.handlers.key?(method_name.to_s)) || super
82
71
  end
83
72
  end
84
73
  end
@@ -1,4 +1,4 @@
1
- # typed: false
1
+ # typed: ignore
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'restate'
@@ -1,6 +1,6 @@
1
- # typed: strict
1
+ # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Restate
5
- VERSION = '0.7.0'
5
+ VERSION = '0.9.0'
6
6
  end
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: false
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Restate
@@ -17,7 +17,6 @@ module Restate
17
17
  # end
18
18
  # end
19
19
  class VirtualObject
20
- extend T::Sig
21
20
  extend ServiceDSL
22
21
 
23
22
  # Register an exclusive handler. Use as: +handler def my_method(ctx, arg)+
@@ -33,7 +32,7 @@ module Restate
33
32
  end
34
33
  return method_name unless method_name.is_a?(Symbol)
35
34
 
36
- _register_handler(method_name, **T.unsafe({ kind: kind.to_s, **opts }))
35
+ _register_handler(method_name, kind: kind.to_s, **opts)
37
36
  end
38
37
 
39
38
  # Register a shared (concurrent-access) handler.
@@ -46,7 +45,7 @@ module Restate
46
45
  "handler expects a Symbol (use `shared def #{method_name}(...)` or `shared :#{method_name}`)"
47
46
  end
48
47
 
49
- _register_handler(method_name, **T.unsafe({ kind: 'shared', **opts }))
48
+ _register_handler(method_name, kind: 'shared', **opts)
50
49
  end
51
50
 
52
51
  # Returns a call proxy for fluent durable calls to this virtual object.
data/lib/restate/vm.rb CHANGED
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: ignore
2
2
  # frozen_string_literal: true
3
3
 
4
4
  begin
@@ -19,9 +19,9 @@ module Restate
19
19
  class NotReady; end
20
20
  class Suspended; end
21
21
 
22
- NOT_READY = T.let(NotReady.new.freeze, NotReady)
23
- SUSPENDED = T.let(Suspended.new.freeze, Suspended)
24
- CANCEL_HANDLE = T.let(Internal::CANCEL_NOTIFICATION_HANDLE, Integer)
22
+ NOT_READY = NotReady.new.freeze
23
+ SUSPENDED = Suspended.new.freeze
24
+ CANCEL_HANDLE = Internal::CANCEL_NOTIFICATION_HANDLE
25
25
 
26
26
  # Progress loop result types
27
27
  class DoProgressAnyCompleted; end
@@ -29,10 +29,10 @@ module Restate
29
29
  class DoProgressCancelSignalReceived; end
30
30
  class DoWaitPendingRun; end
31
31
 
32
- DO_PROGRESS_ANY_COMPLETED = T.let(DoProgressAnyCompleted.new.freeze, DoProgressAnyCompleted)
33
- DO_PROGRESS_READ_FROM_INPUT = T.let(DoProgressReadFromInput.new.freeze, DoProgressReadFromInput)
34
- DO_PROGRESS_CANCEL_SIGNAL_RECEIVED = T.let(DoProgressCancelSignalReceived.new.freeze, DoProgressCancelSignalReceived)
35
- DO_WAIT_PENDING_RUN = T.let(DoWaitPendingRun.new.freeze, DoWaitPendingRun)
32
+ DO_PROGRESS_ANY_COMPLETED = DoProgressAnyCompleted.new.freeze
33
+ DO_PROGRESS_READ_FROM_INPUT = DoProgressReadFromInput.new.freeze
34
+ DO_PROGRESS_CANCEL_SIGNAL_RECEIVED = DoProgressCancelSignalReceived.new.freeze
35
+ DO_WAIT_PENDING_RUN = DoWaitPendingRun.new.freeze
36
36
 
37
37
  DoProgressExecuteRun = Struct.new(:handle, keyword_init: true)
38
38
 
@@ -52,50 +52,39 @@ module Restate
52
52
 
53
53
  # Wraps the native Restate::Internal::VM, mapping native types to Ruby types.
54
54
  class VMWrapper
55
- extend T::Sig
56
-
57
- sig { params(headers: T.untyped).void }
58
55
  def initialize(headers)
59
- @vm = T.let(Internal::VM.new(headers), Internal::VM)
56
+ @vm = Internal::VM.new(headers)
60
57
  end
61
58
 
62
- sig { returns([Integer, T.untyped]) }
63
59
  def get_response_head
64
60
  result = @vm.get_response_head
65
61
  [result.status_code, result.headers]
66
62
  end
67
63
 
68
- sig { params(buf: String).void }
69
64
  def notify_input(buf)
70
65
  @vm.notify_input(buf)
71
66
  end
72
67
 
73
- sig { void }
74
68
  def notify_input_closed
75
69
  @vm.notify_input_closed
76
70
  end
77
71
 
78
- sig { params(error: String, stacktrace: T.nilable(String)).void }
79
72
  def notify_error(error, stacktrace = nil)
80
73
  @vm.notify_error(error, stacktrace)
81
74
  end
82
75
 
83
- sig { returns(T.nilable(String)) }
84
76
  def take_output
85
77
  @vm.take_output
86
78
  end
87
79
 
88
- sig { returns(T::Boolean) }
89
80
  def is_ready_to_execute
90
81
  @vm.is_ready_to_execute
91
82
  end
92
83
 
93
- sig { params(handle: Integer).returns(T::Boolean) }
94
84
  def is_completed(handle)
95
85
  @vm.is_completed(handle)
96
86
  end
97
87
 
98
- sig { params(handles: T::Array[Integer]).returns(T.untyped) }
99
88
  def do_progress(handles)
100
89
  result = @vm.do_progress(handles)
101
90
  map_do_progress(result)
@@ -103,7 +92,6 @@ module Restate
103
92
  e
104
93
  end
105
94
 
106
- sig { params(handle: Integer).returns(T.untyped) }
107
95
  def take_notification(handle)
108
96
  result = @vm.take_notification(handle)
109
97
  map_notification(result)
@@ -111,7 +99,6 @@ module Restate
111
99
  e
112
100
  end
113
101
 
114
- sig { returns(T.untyped) }
115
102
  def sys_input
116
103
  inp = @vm.sys_input
117
104
  headers = inp.headers.map { |h| [h.key, h.value] }
@@ -124,94 +111,56 @@ module Restate
124
111
  )
125
112
  end
126
113
 
127
- sig { params(name: String).returns(Integer) }
128
114
  def sys_get_state(name)
129
115
  @vm.sys_get_state(name)
130
116
  end
131
117
 
132
- sig { returns(Integer) }
133
118
  def sys_get_state_keys
134
119
  @vm.sys_get_state_keys
135
120
  end
136
121
 
137
- sig { params(name: String, value: String).void }
138
122
  def sys_set_state(name, value)
139
123
  @vm.sys_set_state(name, value)
140
124
  end
141
125
 
142
- sig { params(name: String).void }
143
126
  def sys_clear_state(name)
144
127
  @vm.sys_clear_state(name)
145
128
  end
146
129
 
147
- sig { void }
148
130
  def sys_clear_all_state
149
131
  @vm.sys_clear_all_state
150
132
  end
151
133
 
152
- sig { params(millis: Integer, name: T.nilable(String)).returns(Integer) }
153
134
  def sys_sleep(millis, name = nil)
154
135
  # Rust side always expects 2 args: (millis, name_or_nil)
155
136
  @vm.sys_sleep(millis, name)
156
137
  end
157
138
 
158
- sig do
159
- params(
160
- service: String,
161
- handler: String,
162
- parameter: String,
163
- key: T.nilable(String),
164
- idempotency_key: T.nilable(String),
165
- headers: T.nilable(T::Hash[String, String])
166
- ).returns(Internal::CallHandle)
167
- end
168
139
  def sys_call(service:, handler:, parameter:, key: nil, idempotency_key: nil, headers: nil)
169
140
  # Rust side expects 6 args: (service, handler, buffer, key_or_nil, idem_key_or_nil, headers_or_nil)
170
141
  hdr_array = headers&.map { |k, v| [k, v] }
171
142
  @vm.sys_call(service, handler, parameter, key, idempotency_key, hdr_array)
172
143
  end
173
144
 
174
- sig do
175
- params(
176
- service: String,
177
- handler: String,
178
- parameter: String,
179
- key: T.nilable(String),
180
- delay: T.nilable(Integer),
181
- idempotency_key: T.nilable(String),
182
- headers: T.nilable(T::Hash[String, String])
183
- ).returns(Integer)
184
- end
185
145
  def sys_send(service:, handler:, parameter:, key: nil, delay: nil, idempotency_key: nil, headers: nil)
186
146
  # Rust side expects 7 args
187
147
  hdr_array = headers&.map { |k, v| [k, v] }
188
148
  @vm.sys_send(service, handler, parameter, key, delay, idempotency_key, hdr_array)
189
149
  end
190
150
 
191
- sig { params(name: String).returns(Integer) }
192
151
  def sys_run(name)
193
152
  @vm.sys_run(name)
194
153
  end
195
154
 
196
- sig { params(handle: Integer, output: String).void }
197
155
  def propose_run_completion_success(handle, output)
198
156
  @vm.propose_run_completion_success(handle, output)
199
157
  end
200
158
 
201
- sig { params(handle: Integer, failure: T.untyped).void }
202
159
  def propose_run_completion_failure(handle, failure)
203
160
  native_failure = Internal::Failure.new(failure.code, failure.message, nil)
204
161
  @vm.propose_run_completion_failure(handle, native_failure)
205
162
  end
206
163
 
207
- sig do
208
- params(
209
- handle: Integer,
210
- failure: T.untyped,
211
- attempt_duration_ms: Integer,
212
- config: T.untyped
213
- ).void
214
- end
215
164
  def propose_run_completion_transient(handle, failure:, attempt_duration_ms:, config:)
216
165
  native_failure = Internal::Failure.new(failure.code, failure.message, failure.stacktrace)
217
166
  native_config = Internal::ExponentialRetryConfig.new(
@@ -222,73 +171,60 @@ module Restate
222
171
  @vm.propose_run_completion_failure_transient(handle, native_failure, attempt_duration_ms, native_config)
223
172
  end
224
173
 
225
- sig { params(output: String).void }
226
174
  def sys_write_output_success(output)
227
175
  @vm.sys_write_output_success(output)
228
176
  end
229
177
 
230
- sig { params(failure: T.untyped).void }
231
178
  def sys_write_output_failure(failure)
232
179
  native_failure = Internal::Failure.new(failure.code, failure.message, nil)
233
180
  @vm.sys_write_output_failure(native_failure)
234
181
  end
235
182
 
236
- sig { void }
237
183
  def sys_end
238
184
  @vm.sys_end
239
185
  end
240
186
 
241
- sig { returns(T::Boolean) }
242
187
  def is_replaying
243
188
  @vm.is_replaying
244
189
  end
245
190
 
246
191
  # Returns [awakeable_id (String), notification_handle (Integer)]
247
- sig { returns([String, Integer]) }
248
192
  def sys_awakeable
249
193
  @vm.sys_awakeable
250
194
  end
251
195
 
252
- sig { params(awakeable_id: String, value: String).void }
253
196
  def sys_complete_awakeable_success(awakeable_id, value)
254
197
  @vm.sys_complete_awakeable_success(awakeable_id, value)
255
198
  end
256
199
 
257
- sig { params(awakeable_id: String, failure: T.untyped).void }
258
200
  def sys_complete_awakeable_failure(awakeable_id, failure)
259
201
  native_failure = Internal::Failure.new(failure.code, failure.message, nil)
260
202
  @vm.sys_complete_awakeable_failure(awakeable_id, native_failure)
261
203
  end
262
204
 
263
- sig { params(key: String).returns(Integer) }
264
205
  def sys_get_promise(key)
265
206
  @vm.sys_get_promise(key)
266
207
  end
267
208
 
268
- sig { params(key: String).returns(Integer) }
269
209
  def sys_peek_promise(key)
270
210
  @vm.sys_peek_promise(key)
271
211
  end
272
212
 
273
- sig { params(key: String, value: String).returns(Integer) }
274
213
  def sys_complete_promise_success(key, value)
275
214
  @vm.sys_complete_promise_success(key, value)
276
215
  end
277
216
 
278
- sig { params(key: String, failure: T.untyped).returns(Integer) }
279
217
  def sys_complete_promise_failure(key, failure)
280
218
  native_failure = Internal::Failure.new(failure.code, failure.message, nil)
281
219
  @vm.sys_complete_promise_failure(key, native_failure)
282
220
  end
283
221
 
284
- sig { params(invocation_id: String).void }
285
222
  def sys_cancel_invocation(invocation_id)
286
223
  @vm.sys_cancel_invocation(invocation_id)
287
224
  end
288
225
 
289
226
  private
290
227
 
291
- sig { params(result: T.untyped).returns(T.untyped) }
292
228
  def map_do_progress(result)
293
229
  case result
294
230
  when Internal::Suspended
@@ -308,7 +244,6 @@ module Restate
308
244
  end
309
245
  end
310
246
 
311
- sig { params(result: T.untyped).returns(T.untyped) }
312
247
  def map_notification(result)
313
248
  case result
314
249
  when Internal::Suspended
@@ -1,4 +1,4 @@
1
- # typed: true
1
+ # typed: false
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Restate
@@ -15,7 +15,6 @@ module Restate
15
15
  # end
16
16
  # end
17
17
  class Workflow
18
- extend T::Sig
19
18
  extend ServiceDSL
20
19
 
21
20
  # Register the main workflow entry point.
@@ -31,7 +30,7 @@ module Restate
31
30
  end
32
31
  return method_name unless method_name.is_a?(Symbol)
33
32
 
34
- _register_handler(method_name, **T.unsafe({ kind: 'workflow', **opts }))
33
+ _register_handler(method_name, kind: 'workflow', **opts)
35
34
  end
36
35
 
37
36
  # Register a shared handler on this workflow.
@@ -46,7 +45,7 @@ module Restate
46
45
  end
47
46
  return method_name unless method_name.is_a?(Symbol)
48
47
 
49
- _register_handler(method_name, **T.unsafe({ kind: 'shared', **opts }))
48
+ _register_handler(method_name, kind: 'shared', **opts)
50
49
  end
51
50
 
52
51
  # Returns a call proxy for fluent durable calls to this workflow.