@arrirpc/codegen-rust 0.55.0 → 0.57.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.
- package/README.md +79 -9
- package/package.json +3 -3
package/README.md
CHANGED
@@ -37,31 +37,101 @@ cargo add arri_client
|
|
37
37
|
|
38
38
|
## Using the generated code
|
39
39
|
|
40
|
-
|
40
|
+
All of the generated procedures in this client will be async functions, so you will need an async runtime like [tokio](https://tokio.rs/)
|
41
|
+
|
42
|
+
### Initializing the client
|
41
43
|
|
42
44
|
```rust
|
43
45
|
let config = ArriClientConfig {
|
44
46
|
http_client: reqwest::Client::new(),
|
45
47
|
base_url: "https://example.com".to_string(),
|
46
|
-
|
47
|
-
headers: || {
|
48
|
-
let mut header_map = Hashmap::<&'static str, &'static str>::new();
|
49
|
-
header_map.insert("some-header", "some-header-value");
|
50
|
-
header_map
|
51
|
-
}
|
48
|
+
headers: Hashmap::new(),
|
52
49
|
}
|
53
|
-
let client = MyClient::create(
|
50
|
+
let client = MyClient::create(config);
|
54
51
|
|
52
|
+
// start calling procedures
|
55
53
|
client.my_procedure().await;
|
56
54
|
```
|
57
55
|
|
58
56
|
The root client will be a struct containing all of the services and procedures. If you only need a particular service you can initialize just that service.
|
59
57
|
|
60
58
|
```rust
|
61
|
-
let users_service = MyClientUsersService(
|
59
|
+
let users_service = MyClientUsersService(config);
|
62
60
|
users_service.some_procedure().await;
|
63
61
|
```
|
64
62
|
|
63
|
+
### Updating Headers
|
64
|
+
|
65
|
+
For instances that you need to update the http headers (like in the case of an expired auth token), you can call the `update_headers()` function. When called, changes will propagate to all nested subservices.
|
66
|
+
|
67
|
+
```rust
|
68
|
+
client.update_headers(new_headers);
|
69
|
+
```
|
70
|
+
|
71
|
+
Be aware that if `update_headers()` is called from a subservice it will not propagate up to the parent service(s).
|
72
|
+
|
73
|
+
```rust
|
74
|
+
client.subservice.update_headers(new_headers);
|
75
|
+
|
76
|
+
// this will still use the original headers
|
77
|
+
client.do_something();
|
78
|
+
```
|
79
|
+
|
80
|
+
`update_headers()` be also be called across threads.
|
81
|
+
|
82
|
+
```rust
|
83
|
+
let mut headers: HashMap<&'static str, String> = HashMap::new();
|
84
|
+
let config = ArriClientConfig {
|
85
|
+
http_client: reqwest::Client::new(),
|
86
|
+
base_url: "https://example.com".to_string(),
|
87
|
+
headers: headers.clone(),
|
88
|
+
}
|
89
|
+
let client = Arc::new(MyClient::create(config));
|
90
|
+
tokio::spawn(async move {
|
91
|
+
loop {
|
92
|
+
client.do_something().await;
|
93
|
+
}
|
94
|
+
});
|
95
|
+
tokio::spawn(async move {
|
96
|
+
loop {
|
97
|
+
client.do_another_thing().await;
|
98
|
+
}
|
99
|
+
});
|
100
|
+
|
101
|
+
// wait two seconds then change the headers
|
102
|
+
tokio::time::sleep(Duration::from_millis(2000)).await;
|
103
|
+
headers.insert("hello", "world".to_string());
|
104
|
+
client.update_headers(headers.clone());
|
105
|
+
// now both threads will start using the updated headers on their next loop
|
106
|
+
```
|
107
|
+
|
108
|
+
### Calling SSE Procedures
|
109
|
+
|
110
|
+
```rust
|
111
|
+
let mut msg_count = 0;
|
112
|
+
let mut open_count = 0;
|
113
|
+
client
|
114
|
+
.users
|
115
|
+
.watch_user(
|
116
|
+
&mut |event, controller| match event {
|
117
|
+
SseEvent::Message(msg) => {
|
118
|
+
msg_count += 1;
|
119
|
+
printl("NEW_MESSAGE: {:?}", msg);
|
120
|
+
}
|
121
|
+
SSeEvent::Error(err) => {
|
122
|
+
// call abort to close the event stream
|
123
|
+
controller.abort()
|
124
|
+
}
|
125
|
+
SseEvent::Open => {
|
126
|
+
open_count += 1;
|
127
|
+
}
|
128
|
+
SseEvent::Close => {}
|
129
|
+
},
|
130
|
+
None, // max_retry_count (u64)
|
131
|
+
None, // max_retry_interval (u64)
|
132
|
+
).await;
|
133
|
+
```
|
134
|
+
|
65
135
|
### Using the generated types
|
66
136
|
|
67
137
|
All the generated types will have the following methods implemented
|
package/package.json
CHANGED
@@ -22,10 +22,10 @@
|
|
22
22
|
],
|
23
23
|
"dependencies": {
|
24
24
|
"pathe": "^1.1.2",
|
25
|
-
"@arrirpc/codegen-utils": "0.
|
25
|
+
"@arrirpc/codegen-utils": "0.57.0"
|
26
26
|
},
|
27
27
|
"devDependencies": {
|
28
|
-
"@arrirpc/schema": "0.
|
28
|
+
"@arrirpc/schema": "0.57.0"
|
29
29
|
},
|
30
|
-
"version": "0.
|
30
|
+
"version": "0.57.0"
|
31
31
|
}
|