typespec-rust-emitter 0.10.7 → 0.12.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/AGENTS.md +2 -0
- package/CHANGELOG.md +83 -0
- package/dist/src/emitter.d.ts +2 -0
- package/dist/src/emitter.js +136 -16
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/test/hello.test.js +131 -1
- package/dist/test/hello.test.js.map +1 -1
- package/example/main.tsp +59 -0
- package/example/output-rust/Cargo.lock +27 -0
- package/example/output-rust/Cargo.toml +1 -1
- package/example/output-rust/src/generated/server.rs +204 -4
- package/example/output-rust/src/generated/types.rs +8 -0
- package/example/output-rust/src/main.rs +54 -5
- package/package.json +1 -1
- package/src/emitter.ts +156 -24
- package/src/index.ts +2 -0
- package/src/lib.tsp +2 -0
- package/test/hello.test.ts +143 -1
package/dist/test/hello.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { strictEqual } from "node:assert";
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
|
-
import { emit } from "./test-host.js";
|
|
3
|
+
import { emit, emitWithDiagnostics } from "./test-host.js";
|
|
4
4
|
describe("Rust emitter", () => {
|
|
5
5
|
it("emits basic model", async () => {
|
|
6
6
|
const results = await emit(`
|
|
@@ -371,5 +371,135 @@ describe("Rust emitter", () => {
|
|
|
371
371
|
strictEqual(server.includes("axum::response::Response"), true);
|
|
372
372
|
strictEqual(server.includes("EventsStreamResponse::Ok(body) => body.into_response(),"), true);
|
|
373
373
|
});
|
|
374
|
+
it("uses &self by default in trait methods", async () => {
|
|
375
|
+
const results = await emit(`
|
|
376
|
+
import "@typespec/http";
|
|
377
|
+
import "typespec-rust-emitter";
|
|
378
|
+
using TypeSpec.Http;
|
|
379
|
+
|
|
380
|
+
@route("/test")
|
|
381
|
+
namespace Test {
|
|
382
|
+
@get
|
|
383
|
+
op getItem(): { @statusCode status: 200; @body body: string };
|
|
384
|
+
}
|
|
385
|
+
`);
|
|
386
|
+
const server = results["server.rs"];
|
|
387
|
+
strictEqual(server.includes("async fn test_get_item(&self)"), true);
|
|
388
|
+
});
|
|
389
|
+
it("uses &mut self with @rustMut decorator", async () => {
|
|
390
|
+
const results = await emit(`
|
|
391
|
+
import "@typespec/http";
|
|
392
|
+
import "typespec-rust-emitter";
|
|
393
|
+
using TypeSpec.Http;
|
|
394
|
+
|
|
395
|
+
@route("/test")
|
|
396
|
+
namespace Test {
|
|
397
|
+
@rustMut
|
|
398
|
+
@post
|
|
399
|
+
op createItem(@body name: string): { @statusCode status: 200; @body body: string };
|
|
400
|
+
}
|
|
401
|
+
`);
|
|
402
|
+
const server = results["server.rs"];
|
|
403
|
+
strictEqual(server.includes("test_create_item(&mut self,"), true);
|
|
404
|
+
});
|
|
405
|
+
it("uses self with @rustOwn decorator", async () => {
|
|
406
|
+
const results = await emit(`
|
|
407
|
+
import "@typespec/http";
|
|
408
|
+
import "typespec-rust-emitter";
|
|
409
|
+
using TypeSpec.Http;
|
|
410
|
+
|
|
411
|
+
@route("/test")
|
|
412
|
+
namespace Test {
|
|
413
|
+
@rustOwn
|
|
414
|
+
@delete
|
|
415
|
+
op deleteItem(): { @statusCode status: 200; @body body: string };
|
|
416
|
+
}
|
|
417
|
+
`);
|
|
418
|
+
const server = results["server.rs"];
|
|
419
|
+
strictEqual(server.includes("test_delete_item(self)"), true);
|
|
420
|
+
});
|
|
421
|
+
it("@rustMut works with protected routes", async () => {
|
|
422
|
+
const results = await emit(`
|
|
423
|
+
import "@typespec/http";
|
|
424
|
+
import "typespec-rust-emitter";
|
|
425
|
+
using TypeSpec.Http;
|
|
426
|
+
|
|
427
|
+
@route("/test")
|
|
428
|
+
namespace Test {
|
|
429
|
+
@rustMut
|
|
430
|
+
@post
|
|
431
|
+
op createItem(@body name: string, @header Authorization: string): { @statusCode status: 200; @body body: string };
|
|
432
|
+
}
|
|
433
|
+
`);
|
|
434
|
+
const server = results["server.rs"];
|
|
435
|
+
strictEqual(server.includes("test_create_item(&mut self,"), true);
|
|
436
|
+
});
|
|
437
|
+
it("@rustOwn works with protected routes", async () => {
|
|
438
|
+
const results = await emit(`
|
|
439
|
+
import "@typespec/http";
|
|
440
|
+
import "typespec-rust-emitter";
|
|
441
|
+
using TypeSpec.Http;
|
|
442
|
+
|
|
443
|
+
@route("/test")
|
|
444
|
+
namespace Test {
|
|
445
|
+
@rustOwn
|
|
446
|
+
@delete
|
|
447
|
+
op deleteItem(@query id: string): { @statusCode status: 200; @body body: string };
|
|
448
|
+
}
|
|
449
|
+
`);
|
|
450
|
+
const server = results["server.rs"];
|
|
451
|
+
strictEqual(server.includes("test_delete_item(self,"), true);
|
|
452
|
+
});
|
|
453
|
+
it("reports error when @rustMut is applied to non-operation", async () => {
|
|
454
|
+
const [, diagnostics] = await emitWithDiagnostics(`
|
|
455
|
+
import "@typespec/http";
|
|
456
|
+
import "typespec-rust-emitter";
|
|
457
|
+
using TypeSpec.Http;
|
|
458
|
+
|
|
459
|
+
@rustMut
|
|
460
|
+
model Test {
|
|
461
|
+
name: string;
|
|
462
|
+
}
|
|
463
|
+
`);
|
|
464
|
+
const hasError = diagnostics.some((d) => d.code === "decorator-wrong-target");
|
|
465
|
+
strictEqual(hasError, true);
|
|
466
|
+
});
|
|
467
|
+
it("reports error when @rustOwn is applied to non-operation", async () => {
|
|
468
|
+
const [, diagnostics] = await emitWithDiagnostics(`
|
|
469
|
+
import "@typespec/http";
|
|
470
|
+
import "typespec-rust-emitter";
|
|
471
|
+
using TypeSpec.Http;
|
|
472
|
+
|
|
473
|
+
@rustOwn
|
|
474
|
+
model Test {
|
|
475
|
+
name: string;
|
|
476
|
+
}
|
|
477
|
+
`);
|
|
478
|
+
const hasError = diagnostics.some((d) => d.code === "decorator-wrong-target");
|
|
479
|
+
strictEqual(hasError, true);
|
|
480
|
+
});
|
|
481
|
+
it("emits multipartBody with Multipart extractor", async () => {
|
|
482
|
+
const results = await emit(`
|
|
483
|
+
import "@typespec/http";
|
|
484
|
+
using TypeSpec.Http;
|
|
485
|
+
|
|
486
|
+
@route("/upload")
|
|
487
|
+
namespace Upload {
|
|
488
|
+
@post
|
|
489
|
+
op uploadFile(
|
|
490
|
+
@path accountId: string,
|
|
491
|
+
@multipartBody body: {
|
|
492
|
+
image: HttpPart<File>,
|
|
493
|
+
},
|
|
494
|
+
): {
|
|
495
|
+
@statusCode statusCode: 201;
|
|
496
|
+
@body body: string;
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
`);
|
|
500
|
+
const server = results["server.rs"];
|
|
501
|
+
strictEqual(server.includes("multipart: axum::extract::Multipart,"), true);
|
|
502
|
+
strictEqual(server.includes("body: Multipart"), true);
|
|
503
|
+
});
|
|
374
504
|
});
|
|
375
505
|
//# sourceMappingURL=hello.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hello.test.js","sourceRoot":"","sources":["../../test/hello.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hello.test.js","sourceRoot":"","sources":["../../test/hello.test.ts"],"names":[],"mappings":"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"}
|
package/example/main.tsp
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "@typespec/http";
|
|
2
2
|
import "@typespec/sse";
|
|
3
3
|
import "@typespec/events";
|
|
4
|
+
import "typespec-rust-emitter";
|
|
4
5
|
|
|
5
6
|
using TypeSpec.Http;
|
|
6
7
|
using TypeSpec.SSE;
|
|
@@ -8,6 +9,9 @@ using TypeSpec.SSE;
|
|
|
8
9
|
@service(#{ title: "Demo" })
|
|
9
10
|
namespace Demo;
|
|
10
11
|
|
|
12
|
+
@format("uuid")
|
|
13
|
+
scalar Uuid extends string;
|
|
14
|
+
|
|
11
15
|
model MyEventData {
|
|
12
16
|
message: string;
|
|
13
17
|
}
|
|
@@ -31,3 +35,58 @@ namespace Pets {
|
|
|
31
35
|
@body body: string[];
|
|
32
36
|
};
|
|
33
37
|
}
|
|
38
|
+
|
|
39
|
+
model Item {
|
|
40
|
+
name: string;
|
|
41
|
+
value: int32;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@route("/items")
|
|
45
|
+
namespace Items {
|
|
46
|
+
@get
|
|
47
|
+
op getItem(@query id: string): {
|
|
48
|
+
@statusCode status: 200;
|
|
49
|
+
@body body: Item;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
@rustMut
|
|
53
|
+
@post
|
|
54
|
+
op createItem(@body item: Item): {
|
|
55
|
+
@statusCode status: 201;
|
|
56
|
+
@body body: Item;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
@rustMut
|
|
60
|
+
@put
|
|
61
|
+
op updateItem(@query id: string, @body item: Item): {
|
|
62
|
+
@statusCode status: 200;
|
|
63
|
+
@body body: Item;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@route("/consuming")
|
|
68
|
+
namespace Consuming {
|
|
69
|
+
@rustOwn
|
|
70
|
+
@delete
|
|
71
|
+
op consumeAndDelete(@query id: string): {
|
|
72
|
+
@statusCode status: 204;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
@post
|
|
76
|
+
op upload(
|
|
77
|
+
@path accountId: Uuid,
|
|
78
|
+
@header `content-type`: "multipart/form-data",
|
|
79
|
+
@multipartBody body: {
|
|
80
|
+
image: HttpPart<File>;
|
|
81
|
+
},
|
|
82
|
+
): {
|
|
83
|
+
@statusCode statusCode: 201;
|
|
84
|
+
@body body: string;
|
|
85
|
+
} | {
|
|
86
|
+
@statusCode statusCode: 400;
|
|
87
|
+
@body error: string;
|
|
88
|
+
} | {
|
|
89
|
+
@statusCode statusCode: 401;
|
|
90
|
+
@body error: string;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -83,6 +83,7 @@ dependencies = [
|
|
|
83
83
|
"matchit",
|
|
84
84
|
"memchr",
|
|
85
85
|
"mime",
|
|
86
|
+
"multer",
|
|
86
87
|
"percent-encoding",
|
|
87
88
|
"pin-project-lite",
|
|
88
89
|
"serde_core",
|
|
@@ -313,6 +314,15 @@ dependencies = [
|
|
|
313
314
|
"serde",
|
|
314
315
|
]
|
|
315
316
|
|
|
317
|
+
[[package]]
|
|
318
|
+
name = "encoding_rs"
|
|
319
|
+
version = "0.8.35"
|
|
320
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
321
|
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
|
|
322
|
+
dependencies = [
|
|
323
|
+
"cfg-if",
|
|
324
|
+
]
|
|
325
|
+
|
|
316
326
|
[[package]]
|
|
317
327
|
name = "equivalent"
|
|
318
328
|
version = "1.0.2"
|
|
@@ -947,6 +957,23 @@ dependencies = [
|
|
|
947
957
|
"windows-sys 0.61.2",
|
|
948
958
|
]
|
|
949
959
|
|
|
960
|
+
[[package]]
|
|
961
|
+
name = "multer"
|
|
962
|
+
version = "3.1.0"
|
|
963
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
964
|
+
checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b"
|
|
965
|
+
dependencies = [
|
|
966
|
+
"bytes",
|
|
967
|
+
"encoding_rs",
|
|
968
|
+
"futures-util",
|
|
969
|
+
"http",
|
|
970
|
+
"httparse",
|
|
971
|
+
"memchr",
|
|
972
|
+
"mime",
|
|
973
|
+
"spin",
|
|
974
|
+
"version_check",
|
|
975
|
+
]
|
|
976
|
+
|
|
950
977
|
[[package]]
|
|
951
978
|
name = "num-bigint-dig"
|
|
952
979
|
version = "0.8.6"
|
|
@@ -11,7 +11,7 @@ serde_json = "1.0.149"
|
|
|
11
11
|
thiserror = "2.0.18"
|
|
12
12
|
uuid = { version = "1.23.0", features = ["serde", "v4"] }
|
|
13
13
|
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "derive"] }
|
|
14
|
-
axum = "0.8.8"
|
|
14
|
+
axum = { version = "0.8.8", features = ["multipart"] }
|
|
15
15
|
eyre = "0.6"
|
|
16
16
|
async-trait = "0.1"
|
|
17
17
|
tokio = { version = "1.50.0", features = ["full"] }
|
|
@@ -16,6 +16,11 @@ pub trait Server: Send + Sync {
|
|
|
16
16
|
|
|
17
17
|
async fn events_accounts_events(&self, account_id: String) -> Result<EventsAccountsEventsResponse>;
|
|
18
18
|
async fn pets_list(&self, first_query: String, second_query: String) -> Result<PetsListResponse>;
|
|
19
|
+
async fn items_get_item(&self, id: String) -> Result<ItemsGetItemResponse>;
|
|
20
|
+
async fn items_create_item(&mut self, body: Item) -> Result<ItemsCreateItemResponse>;
|
|
21
|
+
async fn items_update_item(&mut self, id: String, body: Item) -> Result<ItemsUpdateItemResponse>;
|
|
22
|
+
async fn consuming_consume_and_delete(self, id: String) -> Result<ConsumingConsumeAndDeleteResponse>;
|
|
23
|
+
async fn consuming_upload(&self, account_id: uuid::Uuid, body: Multipart) -> Result<ConsumingUploadResponse>;
|
|
19
24
|
}
|
|
20
25
|
#[allow(clippy::type_complexity)]
|
|
21
26
|
pub enum EventsAccountsEventsResponse {
|
|
@@ -45,8 +50,82 @@ impl IntoResponse for PetsListResponse {
|
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
#[allow(clippy::type_complexity)]
|
|
54
|
+
pub enum ItemsGetItemResponse {
|
|
55
|
+
Ok(Json<Item>),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
impl IntoResponse for ItemsGetItemResponse {
|
|
59
|
+
fn into_response(self) -> axum::response::Response {
|
|
60
|
+
match self {
|
|
61
|
+
|
|
62
|
+
ItemsGetItemResponse::Ok(body) => (StatusCode::OK, body).into_response(),
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#[allow(clippy::type_complexity)]
|
|
68
|
+
pub enum ItemsCreateItemResponse {
|
|
69
|
+
Ok(Json<Item>),
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
impl IntoResponse for ItemsCreateItemResponse {
|
|
73
|
+
fn into_response(self) -> axum::response::Response {
|
|
74
|
+
match self {
|
|
75
|
+
|
|
76
|
+
ItemsCreateItemResponse::Ok(body) => (StatusCode::OK, body).into_response(),
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#[allow(clippy::type_complexity)]
|
|
82
|
+
pub enum ItemsUpdateItemResponse {
|
|
83
|
+
Ok(Json<Item>),
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
impl IntoResponse for ItemsUpdateItemResponse {
|
|
87
|
+
fn into_response(self) -> axum::response::Response {
|
|
88
|
+
match self {
|
|
89
|
+
|
|
90
|
+
ItemsUpdateItemResponse::Ok(body) => (StatusCode::OK, body).into_response(),
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#[allow(clippy::type_complexity)]
|
|
96
|
+
pub enum ConsumingConsumeAndDeleteResponse {
|
|
97
|
+
Ok,
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
impl IntoResponse for ConsumingConsumeAndDeleteResponse {
|
|
101
|
+
fn into_response(self) -> axum::response::Response {
|
|
102
|
+
match self {
|
|
103
|
+
|
|
104
|
+
ConsumingConsumeAndDeleteResponse::Ok => StatusCode::OK.into_response(),
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
#[allow(clippy::type_complexity)]
|
|
110
|
+
pub enum ConsumingUploadResponse {
|
|
111
|
+
Created(Json<String>),
|
|
112
|
+
BadRequest(Json<String>),
|
|
113
|
+
Unauthorized(Json<String>),
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
impl IntoResponse for ConsumingUploadResponse {
|
|
117
|
+
fn into_response(self) -> axum::response::Response {
|
|
118
|
+
match self {
|
|
119
|
+
|
|
120
|
+
ConsumingUploadResponse::Created(body) => (StatusCode::CREATED, body).into_response(),
|
|
121
|
+
ConsumingUploadResponse::BadRequest(body) => (StatusCode::BAD_REQUEST, body).into_response(),
|
|
122
|
+
ConsumingUploadResponse::Unauthorized(body) => (StatusCode::UNAUTHORIZED, body).into_response(),
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
use axum::extract::{Query, Multipart};
|
|
128
|
+
use axum::routing::{delete, get, post, put};
|
|
50
129
|
use axum::Router;
|
|
51
130
|
|
|
52
131
|
|
|
@@ -58,6 +137,24 @@ pub struct PetsListQuery {
|
|
|
58
137
|
pub second_query: String
|
|
59
138
|
}
|
|
60
139
|
|
|
140
|
+
#[derive(Debug, Clone, serde::Deserialize)]
|
|
141
|
+
pub struct ItemsGetItemQuery {
|
|
142
|
+
#[serde(rename = "id")]
|
|
143
|
+
pub id: String
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
#[derive(Debug, Clone, serde::Deserialize)]
|
|
147
|
+
pub struct ItemsUpdateItemQuery {
|
|
148
|
+
#[serde(rename = "id")]
|
|
149
|
+
pub id: String
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
#[derive(Debug, Clone, serde::Deserialize)]
|
|
153
|
+
pub struct ConsumingConsumeAndDeleteQuery {
|
|
154
|
+
#[serde(rename = "id")]
|
|
155
|
+
pub id: String
|
|
156
|
+
}
|
|
157
|
+
|
|
61
158
|
|
|
62
159
|
|
|
63
160
|
pub async fn events_accounts_events_handler<S>(
|
|
@@ -65,7 +162,7 @@ pub async fn events_accounts_events_handler<S>(
|
|
|
65
162
|
Path(account_id): Path<String>,
|
|
66
163
|
) -> impl axum::response::IntoResponse
|
|
67
164
|
where
|
|
68
|
-
S: Server
|
|
165
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
69
166
|
S::Claims: Send + Sync + Clone + 'static,
|
|
70
167
|
{
|
|
71
168
|
let result = service.events_accounts_events(account_id).await;
|
|
@@ -84,7 +181,7 @@ pub async fn pets_list_handler<S>(
|
|
|
84
181
|
Query(params): Query<PetsListQuery>,
|
|
85
182
|
) -> impl axum::response::IntoResponse
|
|
86
183
|
where
|
|
87
|
-
S: Server
|
|
184
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
88
185
|
S::Claims: Send + Sync + Clone + 'static,
|
|
89
186
|
{
|
|
90
187
|
let result = service.pets_list(params.first_query, params.second_query).await;
|
|
@@ -98,6 +195,105 @@ where
|
|
|
98
195
|
}
|
|
99
196
|
}
|
|
100
197
|
|
|
198
|
+
pub async fn items_get_item_handler<S>(
|
|
199
|
+
axum::extract::State(service): axum::extract::State<S>,
|
|
200
|
+
Query(params): Query<ItemsGetItemQuery>,
|
|
201
|
+
) -> impl axum::response::IntoResponse
|
|
202
|
+
where
|
|
203
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
204
|
+
S::Claims: Send + Sync + Clone + 'static,
|
|
205
|
+
{
|
|
206
|
+
let result = service.items_get_item(params.id).await;
|
|
207
|
+
match result {
|
|
208
|
+
Ok(response) => response.into_response(),
|
|
209
|
+
Err(e) => (
|
|
210
|
+
axum::http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
211
|
+
format!("Internal error: {e}"),
|
|
212
|
+
)
|
|
213
|
+
.into_response(),
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
pub async fn items_create_item_handler<S>(
|
|
218
|
+
axum::extract::State(mut service): axum::extract::State<S>,
|
|
219
|
+
Json(payload): Json<Item>,
|
|
220
|
+
) -> impl axum::response::IntoResponse
|
|
221
|
+
where
|
|
222
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
223
|
+
S::Claims: Send + Sync + Clone + 'static,
|
|
224
|
+
{
|
|
225
|
+
let result = service.items_create_item(payload).await;
|
|
226
|
+
match result {
|
|
227
|
+
Ok(response) => response.into_response(),
|
|
228
|
+
Err(e) => (
|
|
229
|
+
axum::http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
230
|
+
format!("Internal error: {e}"),
|
|
231
|
+
)
|
|
232
|
+
.into_response(),
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
pub async fn items_update_item_handler<S>(
|
|
237
|
+
axum::extract::State(mut service): axum::extract::State<S>,
|
|
238
|
+
Query(params): Query<ItemsUpdateItemQuery>,
|
|
239
|
+
Json(payload): Json<Item>,
|
|
240
|
+
) -> impl axum::response::IntoResponse
|
|
241
|
+
where
|
|
242
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
243
|
+
S::Claims: Send + Sync + Clone + 'static,
|
|
244
|
+
{
|
|
245
|
+
let result = service.items_update_item(params.id, payload).await;
|
|
246
|
+
match result {
|
|
247
|
+
Ok(response) => response.into_response(),
|
|
248
|
+
Err(e) => (
|
|
249
|
+
axum::http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
250
|
+
format!("Internal error: {e}"),
|
|
251
|
+
)
|
|
252
|
+
.into_response(),
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// NOTE: consuming_consume_and_delete takes self and cannot be used with the router pattern.
|
|
257
|
+
// It consumes the service, so you need to implement your own handler pattern.
|
|
258
|
+
pub async fn consuming_consume_and_delete_handler<S>(
|
|
259
|
+
axum::extract::State(service): axum::extract::State<S>,
|
|
260
|
+
Query(params): Query<ConsumingConsumeAndDeleteQuery>,
|
|
261
|
+
) -> impl axum::response::IntoResponse
|
|
262
|
+
where
|
|
263
|
+
S: Server + Send + Sync + 'static,
|
|
264
|
+
S::Claims: Send + Sync + Clone + 'static,
|
|
265
|
+
{
|
|
266
|
+
let result = service.consuming_consume_and_delete(params.id).await;
|
|
267
|
+
match result {
|
|
268
|
+
Ok(response) => response.into_response(),
|
|
269
|
+
Err(e) => (
|
|
270
|
+
axum::http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
271
|
+
format!("Internal error: {e}"),
|
|
272
|
+
)
|
|
273
|
+
.into_response(),
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
pub async fn consuming_upload_handler<S>(
|
|
278
|
+
axum::extract::State(service): axum::extract::State<S>,
|
|
279
|
+
Path(account_id): Path<uuid::Uuid>,
|
|
280
|
+
multipart: axum::extract::Multipart,
|
|
281
|
+
) -> impl axum::response::IntoResponse
|
|
282
|
+
where
|
|
283
|
+
S: Server+ Clone + Send + Sync + 'static,
|
|
284
|
+
S::Claims: Send + Sync + Clone + 'static,
|
|
285
|
+
{
|
|
286
|
+
let result = service.consuming_upload(account_id, multipart).await;
|
|
287
|
+
match result {
|
|
288
|
+
Ok(response) => response.into_response(),
|
|
289
|
+
Err(e) => (
|
|
290
|
+
axum::http::StatusCode::INTERNAL_SERVER_ERROR,
|
|
291
|
+
format!("Internal error: {e}"),
|
|
292
|
+
)
|
|
293
|
+
.into_response(),
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
101
297
|
pub fn create_router<S, M>(service: S, middleware: M) -> Router
|
|
102
298
|
where
|
|
103
299
|
S: Server + Clone + Send + Sync + 'static,
|
|
@@ -108,6 +304,10 @@ where
|
|
|
108
304
|
let public = Router::new()
|
|
109
305
|
.route("/events/{accountId}", get(events_accounts_events_handler::<S>))
|
|
110
306
|
.route("/pets", get(pets_list_handler::<S>))
|
|
307
|
+
.route("/items", get(items_get_item_handler::<S>))
|
|
308
|
+
.route("/items", post(items_create_item_handler::<S>))
|
|
309
|
+
.route("/items", put(items_update_item_handler::<S>))
|
|
310
|
+
.route("/consuming", post(consuming_upload_handler::<S>))
|
|
111
311
|
;
|
|
112
312
|
router = router.merge(public);
|
|
113
313
|
router.with_state(service)
|
|
@@ -10,9 +10,17 @@ pub struct MyEventData {
|
|
|
10
10
|
pub message: String,
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
|
14
|
+
pub struct Item {
|
|
15
|
+
pub name: String,
|
|
16
|
+
pub value: i32,
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
|
14
20
|
#[serde(untagged)]
|
|
15
21
|
pub enum MyEvent {
|
|
16
22
|
Variant1(MyEventData),
|
|
17
23
|
}
|
|
18
24
|
|
|
25
|
+
pub type Uuid = uuid::Uuid;
|
|
26
|
+
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
mod generated;
|
|
2
2
|
|
|
3
3
|
use async_trait::async_trait;
|
|
4
|
+
use axum::Json;
|
|
4
5
|
use axum::response::IntoResponse;
|
|
5
6
|
use axum::response::sse::{Event, KeepAlive, Sse};
|
|
6
|
-
use generated::server::{
|
|
7
|
+
use generated::server::{
|
|
8
|
+
ConsumingConsumeAndDeleteResponse, ConsumingUploadResponse, EventsAccountsEventsResponse,
|
|
9
|
+
ItemsCreateItemResponse, ItemsGetItemResponse, ItemsUpdateItemResponse, PetsListResponse,
|
|
10
|
+
Server,
|
|
11
|
+
};
|
|
7
12
|
use std::convert::Infallible;
|
|
8
13
|
use std::time::Duration;
|
|
9
14
|
use tokio::time::interval;
|
|
10
15
|
use tokio_stream::{StreamExt as _, wrappers::IntervalStream};
|
|
11
16
|
|
|
12
|
-
use crate::generated::server::PetsListResponse;
|
|
13
|
-
|
|
14
17
|
#[derive(Clone)]
|
|
15
18
|
struct AppState;
|
|
16
19
|
|
|
@@ -24,7 +27,7 @@ impl Server for AppState {
|
|
|
24
27
|
) -> eyre::Result<EventsAccountsEventsResponse> {
|
|
25
28
|
let stream = IntervalStream::new(interval(Duration::from_millis(100)))
|
|
26
29
|
.map(|_| Ok::<_, Infallible>(Event::default().data("hi!")))
|
|
27
|
-
.take(3);
|
|
30
|
+
.take(3);
|
|
28
31
|
|
|
29
32
|
let stream = Sse::new(stream).keep_alive(KeepAlive::default());
|
|
30
33
|
Ok(EventsAccountsEventsResponse::Ok(stream.into_response()))
|
|
@@ -35,7 +38,53 @@ impl Server for AppState {
|
|
|
35
38
|
_first_query: String,
|
|
36
39
|
_second_query: String,
|
|
37
40
|
) -> eyre::Result<PetsListResponse> {
|
|
38
|
-
|
|
41
|
+
Ok(PetsListResponse::Ok(Json(vec![
|
|
42
|
+
"pet1".to_string(),
|
|
43
|
+
"pet2".to_string(),
|
|
44
|
+
])))
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async fn items_get_item(&self, _id: String) -> eyre::Result<ItemsGetItemResponse> {
|
|
48
|
+
Ok(ItemsGetItemResponse::Ok(Json(generated::types::Item {
|
|
49
|
+
name: "test".to_string(),
|
|
50
|
+
value: 42,
|
|
51
|
+
})))
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async fn items_create_item(
|
|
55
|
+
&mut self,
|
|
56
|
+
_body: generated::types::Item,
|
|
57
|
+
) -> eyre::Result<ItemsCreateItemResponse> {
|
|
58
|
+
Ok(ItemsCreateItemResponse::Ok(Json(generated::types::Item {
|
|
59
|
+
name: "created".to_string(),
|
|
60
|
+
value: 0,
|
|
61
|
+
})))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async fn items_update_item(
|
|
65
|
+
&mut self,
|
|
66
|
+
_id: String,
|
|
67
|
+
_body: generated::types::Item,
|
|
68
|
+
) -> eyre::Result<ItemsUpdateItemResponse> {
|
|
69
|
+
Ok(ItemsUpdateItemResponse::Ok(Json(generated::types::Item {
|
|
70
|
+
name: "updated".to_string(),
|
|
71
|
+
value: 1,
|
|
72
|
+
})))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async fn consuming_consume_and_delete(
|
|
76
|
+
self,
|
|
77
|
+
_id: String,
|
|
78
|
+
) -> eyre::Result<ConsumingConsumeAndDeleteResponse> {
|
|
79
|
+
Ok(ConsumingConsumeAndDeleteResponse::Ok)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async fn consuming_upload(
|
|
83
|
+
&self,
|
|
84
|
+
_account_id: uuid::Uuid,
|
|
85
|
+
_multipart: axum::extract::Multipart,
|
|
86
|
+
) -> eyre::Result<ConsumingUploadResponse> {
|
|
87
|
+
Ok(ConsumingUploadResponse::Created(Json("ok".to_string())))
|
|
39
88
|
}
|
|
40
89
|
}
|
|
41
90
|
|