restate-sdk 0.11.0-x86_64-linux → 0.13.0-x86_64-linux
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.
- checksums.yaml +4 -4
- data/Cargo.lock +1 -1
- data/ext/restate_internal/Cargo.toml +1 -1
- data/ext/restate_internal/src/lib.rs +39 -6
- data/lib/restate/3.3/restate_internal.so +0 -0
- data/lib/restate/3.4/restate_internal.so +0 -0
- data/lib/restate/4.0/restate_internal.so +0 -0
- data/lib/restate/config.rb +11 -0
- data/lib/restate/discovery.rb +1 -1
- data/lib/restate/endpoint.rb +2 -2
- data/lib/restate/errors.rb +4 -2
- data/lib/restate/server/context.rb +680 -0
- data/lib/restate/server/handler.rb +269 -0
- data/lib/restate/server.rb +7 -264
- data/lib/restate/version.rb +1 -1
- data/lib/restate/vm.rb +22 -10
- data/lib/restate.rb +7 -2
- data/sig/restate.rbs +10 -3
- metadata +4 -3
- data/lib/restate/server_context.rb +0 -678
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3886f200d09df85267ac44d61ee031dcf7b3c67c19ec36d4588d6ade808dbe6f
|
|
4
|
+
data.tar.gz: f7580ea8952fb87fa37cad385c85bd39491f8ac169b66c3d9338061e7c47d60b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5db2971d531c39c8f93619cc09a9b2c46ca81b7c4f78ad2931c2c3da95c942252bc6c6d7b36b0836afa7abde502492e745e468d470736b6204d88b42fa4ac239
|
|
7
|
+
data.tar.gz: 4af1720520b8fe5107e275a7cea05026c657aa6ae1be26fb0ed17e740e328f6b4bca430e0664b4b012ded7b6ebf1edca43637531a06fb83d19b0026154b85229
|
data/Cargo.lock
CHANGED
|
@@ -129,6 +129,7 @@ struct RbFailure {
|
|
|
129
129
|
code: u16,
|
|
130
130
|
message: String,
|
|
131
131
|
stacktrace: Option<String>,
|
|
132
|
+
metadata: Vec<(String, String)>,
|
|
132
133
|
}
|
|
133
134
|
|
|
134
135
|
impl RbFailure {
|
|
@@ -141,6 +142,17 @@ impl RbFailure {
|
|
|
141
142
|
fn stacktrace(&self) -> Option<&str> {
|
|
142
143
|
self.stacktrace.as_deref()
|
|
143
144
|
}
|
|
145
|
+
fn metadata_array(&self) -> Result<RArray, Error> {
|
|
146
|
+
let ruby = Ruby::get().map_err(|_| Error::new(vm_error_class(), "Ruby not available"))?;
|
|
147
|
+
let ary = ruby.ary_new_capa(self.metadata.len());
|
|
148
|
+
for (k, v) in &self.metadata {
|
|
149
|
+
let pair = ruby.ary_new_capa(2);
|
|
150
|
+
pair.push(ruby.str_new(k))?;
|
|
151
|
+
pair.push(ruby.str_new(v))?;
|
|
152
|
+
ary.push(pair)?;
|
|
153
|
+
}
|
|
154
|
+
Ok(ary)
|
|
155
|
+
}
|
|
144
156
|
}
|
|
145
157
|
|
|
146
158
|
impl From<TerminalFailure> for RbFailure {
|
|
@@ -149,6 +161,7 @@ impl From<TerminalFailure> for RbFailure {
|
|
|
149
161
|
code: f.code,
|
|
150
162
|
message: f.message,
|
|
151
163
|
stacktrace: None,
|
|
164
|
+
metadata: f.metadata,
|
|
152
165
|
}
|
|
153
166
|
}
|
|
154
167
|
}
|
|
@@ -158,7 +171,7 @@ impl From<RbFailure> for TerminalFailure {
|
|
|
158
171
|
TerminalFailure {
|
|
159
172
|
code: f.code,
|
|
160
173
|
message: f.message,
|
|
161
|
-
metadata:
|
|
174
|
+
metadata: f.metadata,
|
|
162
175
|
}
|
|
163
176
|
}
|
|
164
177
|
}
|
|
@@ -929,17 +942,36 @@ fn parse_headers_array(ary: RArray) -> Result<Vec<Header>, Error> {
|
|
|
929
942
|
|
|
930
943
|
// Constructor functions (free functions for use with function! macro)
|
|
931
944
|
|
|
932
|
-
fn rb_failure_new(
|
|
945
|
+
fn rb_failure_new(
|
|
946
|
+
code: u16,
|
|
947
|
+
message: String,
|
|
948
|
+
stacktrace: Value,
|
|
949
|
+
metadata: Value,
|
|
950
|
+
) -> Result<RbFailure, Error> {
|
|
933
951
|
let st = if stacktrace.is_nil() {
|
|
934
952
|
None
|
|
935
953
|
} else {
|
|
936
954
|
Some(String::try_convert(stacktrace).unwrap_or_default())
|
|
937
955
|
};
|
|
938
|
-
|
|
956
|
+
let md = if metadata.is_nil() {
|
|
957
|
+
Vec::new()
|
|
958
|
+
} else {
|
|
959
|
+
let ary = RArray::try_convert(metadata)?;
|
|
960
|
+
let mut out = Vec::with_capacity(ary.len());
|
|
961
|
+
for item in ary.into_iter() {
|
|
962
|
+
let pair = RArray::try_convert(item)?;
|
|
963
|
+
let k: String = pair.entry(0)?;
|
|
964
|
+
let v: String = pair.entry(1)?;
|
|
965
|
+
out.push((k, v));
|
|
966
|
+
}
|
|
967
|
+
out
|
|
968
|
+
};
|
|
969
|
+
Ok(RbFailure {
|
|
939
970
|
code,
|
|
940
971
|
message,
|
|
941
972
|
stacktrace: st,
|
|
942
|
-
|
|
973
|
+
metadata: md,
|
|
974
|
+
})
|
|
943
975
|
}
|
|
944
976
|
|
|
945
977
|
fn rb_exponential_retry_config_new(
|
|
@@ -1002,12 +1034,13 @@ fn init(ruby: &Ruby) -> Result<(), Error> {
|
|
|
1002
1034
|
rh_class.define_method("status_code", method!(RbResponseHead::status_code, 0))?;
|
|
1003
1035
|
rh_class.define_method("headers", method!(RbResponseHead::headers_array, 0))?;
|
|
1004
1036
|
|
|
1005
|
-
// Failure - constructor takes (code, message, stacktrace_or_nil)
|
|
1037
|
+
// Failure - constructor takes (code, message, stacktrace_or_nil, metadata_or_nil)
|
|
1006
1038
|
let failure_class = internal.define_class("Failure", ruby.class_object())?;
|
|
1007
|
-
failure_class.define_singleton_method("new", function!(rb_failure_new,
|
|
1039
|
+
failure_class.define_singleton_method("new", function!(rb_failure_new, 4))?;
|
|
1008
1040
|
failure_class.define_method("code", method!(RbFailure::code, 0))?;
|
|
1009
1041
|
failure_class.define_method("message", method!(RbFailure::message, 0))?;
|
|
1010
1042
|
failure_class.define_method("stacktrace", method!(RbFailure::stacktrace, 0))?;
|
|
1043
|
+
failure_class.define_method("metadata", method!(RbFailure::metadata_array, 0))?;
|
|
1011
1044
|
|
|
1012
1045
|
// Void, Suspended, StateKeys
|
|
1013
1046
|
internal.define_class("Void", ruby.class_object())?;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/lib/restate/config.rb
CHANGED
|
@@ -20,9 +20,20 @@ module Restate
|
|
|
20
20
|
attr_accessor :admin_url
|
|
21
21
|
|
|
22
22
|
# Default headers sent with every ingress request.
|
|
23
|
+
# Can be a Hash or a callable (Proc/Lambda) returning a Hash.
|
|
24
|
+
# A callable is evaluated each time +Restate.client+ is called,
|
|
25
|
+
# which lets frameworks like Rails inject per-request context
|
|
26
|
+
# (e.g., team ID, shard routing, auth tokens).
|
|
27
|
+
#
|
|
28
|
+
# @example Static headers
|
|
29
|
+
# config.ingress_headers = { "Authorization" => "Bearer tok" }
|
|
30
|
+
#
|
|
31
|
+
# @example Dynamic headers
|
|
32
|
+
# config.ingress_headers = -> { { "X-Team-Id" => Current.team_id } }
|
|
23
33
|
attr_accessor :ingress_headers
|
|
24
34
|
|
|
25
35
|
# Default headers sent with every admin request.
|
|
36
|
+
# Accepts the same static Hash or callable forms as +ingress_headers+.
|
|
26
37
|
attr_accessor :admin_headers
|
|
27
38
|
|
|
28
39
|
def initialize
|
data/lib/restate/discovery.rb
CHANGED
data/lib/restate/endpoint.rb
CHANGED
data/lib/restate/errors.rb
CHANGED
|
@@ -6,12 +6,14 @@ module Restate
|
|
|
6
6
|
#
|
|
7
7
|
# @example
|
|
8
8
|
# raise Restate::TerminalError.new('not found', status_code: 404)
|
|
9
|
+
# raise Restate::TerminalError.new('bad input', metadata: { 'field' => 'name' })
|
|
9
10
|
class TerminalError < StandardError
|
|
10
|
-
attr_reader :status_code
|
|
11
|
+
attr_reader :status_code, :metadata
|
|
11
12
|
|
|
12
|
-
def initialize(message = 'Internal Server Error', status_code: 500)
|
|
13
|
+
def initialize(message = 'Internal Server Error', status_code: 500, metadata: nil)
|
|
13
14
|
super(message)
|
|
14
15
|
@status_code = status_code
|
|
16
|
+
@metadata = metadata
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
|