Skip to content

Commit cfadf21

Browse files
committed
update
1 parent 8bf8705 commit cfadf21

File tree

5 files changed

+112
-59
lines changed

5 files changed

+112
-59
lines changed

Cargo.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,19 @@ members = [
1313
#
1414
"crates/rs-leetcode",
1515
"crates/rs-cli",
16-
"crates/rs-ffi/*",
16+
"crates/rs-ffi/rs-ffi-core",
1717
"crates/rs-os/rs-macos/try-notification",
1818
"crates/rs-os/rs-cross/try-notify",
1919
"crates/rs-gui/try-wry",
20-
# "crates/rs-tonic",
21-
# "crates/rs-tauri-vue/src-tauri",
20+
"crates/rs-rpc/rs-tonic",
21+
"crates/rs-pkg",
22+
# "crates/rs-gui/rs-tauri-vue/src-tauri",
2223
# "crates/rs-sqlcipher",
2324
]
2425

2526
exclude = [
2627
"tmp", # 不需要 ** 子目录
28+
# "crates/rs-gui/rs-tauri-vue/src-tauri", # 不需要 ** 子目录
2729
]
2830

2931

crates/rs-gui/rs-tauri-vue/src-tauri/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ edition = "2021"
1010
rust-version = "1.57"
1111

1212

13-
1413
#
1514
# TODO X: 注意, 不作为上层 workspace 的子项目.
1615
# - fix: 编译报错(误报)
@@ -73,7 +72,7 @@ console-subscriber = "0"
7372
#
7473
# workspace internal dependencies:
7574
#
76-
rs-pkg = { path = "../../rs-pkg" }
75+
rs-pkg = { path = "../../../rs-pkg" }
7776

7877

7978
################################################################################

crates/rs-pkg/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

8-
[workspace]
9-
members = []
8+
# [workspace]
9+
# members = []
1010

1111

1212
[dependencies]

crates/rs-rpc/rs-tonic/Cargo.toml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,11 @@ name = "helloworld-client2"
2424
path = "bin/helloworld2/client.rs"
2525

2626

27-
2827
#
2928
# TODO X: 注意, 不能作为上层 workspace 的子项目. 要做根项目, 否则 Clion 的索引, 无法识别 include!() 代码
3029
#
31-
[workspace]
32-
members = []
33-
30+
# [workspace]
31+
# members = []
3432

3533

3634
[dependencies]

crates/rs-rpc/rs-tonic/src/pb/helloworld.rs

Lines changed: 102 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
1+
// This file is @generated by prost-build.
12
/// The request message containing the user's name.
23
#[derive(Clone, PartialEq, ::prost::Message)]
34
pub struct HelloRequest {
4-
#[prost(string, tag="1")]
5+
#[prost(string, tag = "1")]
56
pub name: ::prost::alloc::string::String,
67
}
78
/// The response message containing the greetings
89
#[derive(Clone, PartialEq, ::prost::Message)]
910
pub struct HelloReply {
10-
#[prost(string, tag="1")]
11+
#[prost(string, tag = "1")]
1112
pub message: ::prost::alloc::string::String,
1213
}
1314
/// Generated client implementations.
1415
pub mod greeter_client {
15-
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
16+
#![allow(
17+
unused_variables,
18+
dead_code,
19+
missing_docs,
20+
clippy::wildcard_imports,
21+
clippy::let_unit_value,
22+
)]
1623
use tonic::codegen::*;
1724
use tonic::codegen::http::Uri;
1825
/// The greeting service definition.
@@ -24,7 +31,7 @@ pub mod greeter_client {
2431
/// Attempt to create a new client by connecting to a given endpoint.
2532
pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
2633
where
27-
D: std::convert::TryInto<tonic::transport::Endpoint>,
34+
D: TryInto<tonic::transport::Endpoint>,
2835
D::Error: Into<StdError>,
2936
{
3037
let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
@@ -35,8 +42,8 @@ pub mod greeter_client {
3542
where
3643
T: tonic::client::GrpcService<tonic::body::BoxBody>,
3744
T::Error: Into<StdError>,
38-
T::ResponseBody: Body<Data = Bytes> + Send + 'static,
39-
<T::ResponseBody as Body>::Error: Into<StdError> + Send,
45+
T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
46+
<T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
4047
{
4148
pub fn new(inner: T) -> Self {
4249
let inner = tonic::client::Grpc::new(inner);
@@ -61,7 +68,7 @@ pub mod greeter_client {
6168
>,
6269
<T as tonic::codegen::Service<
6370
http::Request<tonic::body::BoxBody>,
64-
>>::Error: Into<StdError> + Send + Sync,
71+
>>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
6572
{
6673
GreeterClient::new(InterceptedService::new(inner, interceptor))
6774
}
@@ -80,59 +87,85 @@ pub mod greeter_client {
8087
self.inner = self.inner.accept_compressed(encoding);
8188
self
8289
}
90+
/// Limits the maximum size of a decoded message.
91+
///
92+
/// Default: `4MB`
93+
#[must_use]
94+
pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
95+
self.inner = self.inner.max_decoding_message_size(limit);
96+
self
97+
}
98+
/// Limits the maximum size of an encoded message.
99+
///
100+
/// Default: `usize::MAX`
101+
#[must_use]
102+
pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
103+
self.inner = self.inner.max_encoding_message_size(limit);
104+
self
105+
}
83106
/// Sends a greeting
84107
pub async fn say_hello(
85108
&mut self,
86109
request: impl tonic::IntoRequest<super::HelloRequest>,
87-
) -> Result<tonic::Response<super::HelloReply>, tonic::Status> {
110+
) -> std::result::Result<tonic::Response<super::HelloReply>, tonic::Status> {
88111
self.inner
89112
.ready()
90113
.await
91114
.map_err(|e| {
92-
tonic::Status::new(
93-
tonic::Code::Unknown,
115+
tonic::Status::unknown(
94116
format!("Service was not ready: {}", e.into()),
95117
)
96118
})?;
97119
let codec = tonic::codec::ProstCodec::default();
98120
let path = http::uri::PathAndQuery::from_static(
99121
"/helloworld.Greeter/SayHello",
100122
);
101-
self.inner.unary(request.into_request(), path, codec).await
123+
let mut req = request.into_request();
124+
req.extensions_mut()
125+
.insert(GrpcMethod::new("helloworld.Greeter", "SayHello"));
126+
self.inner.unary(req, path, codec).await
102127
}
103128
}
104129
}
105130
/// Generated server implementations.
106131
pub mod greeter_server {
107-
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
132+
#![allow(
133+
unused_variables,
134+
dead_code,
135+
missing_docs,
136+
clippy::wildcard_imports,
137+
clippy::let_unit_value,
138+
)]
108139
use tonic::codegen::*;
109-
///Generated trait containing gRPC methods that should be implemented for use with GreeterServer.
140+
/// Generated trait containing gRPC methods that should be implemented for use with GreeterServer.
110141
#[async_trait]
111-
pub trait Greeter: Send + Sync + 'static {
142+
pub trait Greeter: std::marker::Send + std::marker::Sync + 'static {
112143
/// Sends a greeting
113144
async fn say_hello(
114145
&self,
115146
request: tonic::Request<super::HelloRequest>,
116-
) -> Result<tonic::Response<super::HelloReply>, tonic::Status>;
147+
) -> std::result::Result<tonic::Response<super::HelloReply>, tonic::Status>;
117148
}
118149
/// The greeting service definition.
119150
#[derive(Debug)]
120-
pub struct GreeterServer<T: Greeter> {
121-
inner: _Inner<T>,
151+
pub struct GreeterServer<T> {
152+
inner: Arc<T>,
122153
accept_compression_encodings: EnabledCompressionEncodings,
123154
send_compression_encodings: EnabledCompressionEncodings,
155+
max_decoding_message_size: Option<usize>,
156+
max_encoding_message_size: Option<usize>,
124157
}
125-
struct _Inner<T>(Arc<T>);
126-
impl<T: Greeter> GreeterServer<T> {
158+
impl<T> GreeterServer<T> {
127159
pub fn new(inner: T) -> Self {
128160
Self::from_arc(Arc::new(inner))
129161
}
130162
pub fn from_arc(inner: Arc<T>) -> Self {
131-
let inner = _Inner(inner);
132163
Self {
133164
inner,
134165
accept_compression_encodings: Default::default(),
135166
send_compression_encodings: Default::default(),
167+
max_decoding_message_size: None,
168+
max_encoding_message_size: None,
136169
}
137170
}
138171
pub fn with_interceptor<F>(
@@ -156,24 +189,39 @@ pub mod greeter_server {
156189
self.send_compression_encodings.enable(encoding);
157190
self
158191
}
192+
/// Limits the maximum size of a decoded message.
193+
///
194+
/// Default: `4MB`
195+
#[must_use]
196+
pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
197+
self.max_decoding_message_size = Some(limit);
198+
self
199+
}
200+
/// Limits the maximum size of an encoded message.
201+
///
202+
/// Default: `usize::MAX`
203+
#[must_use]
204+
pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
205+
self.max_encoding_message_size = Some(limit);
206+
self
207+
}
159208
}
160209
impl<T, B> tonic::codegen::Service<http::Request<B>> for GreeterServer<T>
161210
where
162211
T: Greeter,
163-
B: Body + Send + 'static,
164-
B::Error: Into<StdError> + Send + 'static,
212+
B: Body + std::marker::Send + 'static,
213+
B::Error: Into<StdError> + std::marker::Send + 'static,
165214
{
166215
type Response = http::Response<tonic::body::BoxBody>;
167216
type Error = std::convert::Infallible;
168217
type Future = BoxFuture<Self::Response, Self::Error>;
169218
fn poll_ready(
170219
&mut self,
171220
_cx: &mut Context<'_>,
172-
) -> Poll<Result<(), Self::Error>> {
221+
) -> Poll<std::result::Result<(), Self::Error>> {
173222
Poll::Ready(Ok(()))
174223
}
175224
fn call(&mut self, req: http::Request<B>) -> Self::Future {
176-
let inner = self.inner.clone();
177225
match req.uri().path() {
178226
"/helloworld.Greeter/SayHello" => {
179227
#[allow(non_camel_case_types)]
@@ -189,22 +237,29 @@ pub mod greeter_server {
189237
&mut self,
190238
request: tonic::Request<super::HelloRequest>,
191239
) -> Self::Future {
192-
let inner = self.0.clone();
193-
let fut = async move { (*inner).say_hello(request).await };
240+
let inner = Arc::clone(&self.0);
241+
let fut = async move {
242+
<T as Greeter>::say_hello(&inner, request).await
243+
};
194244
Box::pin(fut)
195245
}
196246
}
197247
let accept_compression_encodings = self.accept_compression_encodings;
198248
let send_compression_encodings = self.send_compression_encodings;
249+
let max_decoding_message_size = self.max_decoding_message_size;
250+
let max_encoding_message_size = self.max_encoding_message_size;
199251
let inner = self.inner.clone();
200252
let fut = async move {
201-
let inner = inner.0;
202253
let method = SayHelloSvc(inner);
203254
let codec = tonic::codec::ProstCodec::default();
204255
let mut grpc = tonic::server::Grpc::new(codec)
205256
.apply_compression_config(
206257
accept_compression_encodings,
207258
send_compression_encodings,
259+
)
260+
.apply_max_message_size_config(
261+
max_decoding_message_size,
262+
max_encoding_message_size,
208263
);
209264
let res = grpc.unary(method, req).await;
210265
Ok(res)
@@ -213,40 +268,39 @@ pub mod greeter_server {
213268
}
214269
_ => {
215270
Box::pin(async move {
216-
Ok(
217-
http::Response::builder()
218-
.status(200)
219-
.header("grpc-status", "12")
220-
.header("content-type", "application/grpc")
221-
.body(empty_body())
222-
.unwrap(),
223-
)
271+
let mut response = http::Response::new(empty_body());
272+
let headers = response.headers_mut();
273+
headers
274+
.insert(
275+
tonic::Status::GRPC_STATUS,
276+
(tonic::Code::Unimplemented as i32).into(),
277+
);
278+
headers
279+
.insert(
280+
http::header::CONTENT_TYPE,
281+
tonic::metadata::GRPC_CONTENT_TYPE,
282+
);
283+
Ok(response)
224284
})
225285
}
226286
}
227287
}
228288
}
229-
impl<T: Greeter> Clone for GreeterServer<T> {
289+
impl<T> Clone for GreeterServer<T> {
230290
fn clone(&self) -> Self {
231291
let inner = self.inner.clone();
232292
Self {
233293
inner,
234294
accept_compression_encodings: self.accept_compression_encodings,
235295
send_compression_encodings: self.send_compression_encodings,
296+
max_decoding_message_size: self.max_decoding_message_size,
297+
max_encoding_message_size: self.max_encoding_message_size,
236298
}
237299
}
238300
}
239-
impl<T: Greeter> Clone for _Inner<T> {
240-
fn clone(&self) -> Self {
241-
Self(self.0.clone())
242-
}
243-
}
244-
impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
245-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
246-
write!(f, "{:?}", self.0)
247-
}
248-
}
249-
impl<T: Greeter> tonic::server::NamedService for GreeterServer<T> {
250-
const NAME: &'static str = "helloworld.Greeter";
301+
/// Generated gRPC service name
302+
pub const SERVICE_NAME: &str = "helloworld.Greeter";
303+
impl<T> tonic::server::NamedService for GreeterServer<T> {
304+
const NAME: &'static str = SERVICE_NAME;
251305
}
252306
}

0 commit comments

Comments
 (0)