diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c9d14a..81c2eb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,6 +21,7 @@ jobs: name: Lint runs-on: ubuntu-latest steps: + - run: sudo apt install -y protobuf-compiler libprotobuf-dev - uses: actions/checkout@v3 - name: cargo fmt run: cargo fmt -- --check --color ${{ env.CARGO_TERM_COLOR }} @@ -49,6 +50,7 @@ jobs: name: Build runs-on: ubuntu-latest steps: + - run: sudo apt install -y protobuf-compiler libprotobuf-dev - uses: actions/checkout@v3 - name: Build run: cargo build diff --git a/Cargo.toml b/Cargo.toml index 423671b..358c4ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,9 +76,11 @@ dotenvy = "0.15" [dev-dependencies] tracing-subscriber = { version = "0.3", features = ["default"] } -tonic-build = "0.10" mockall = { version = "0.11" } +[build-dependencies] +tonic-build = "0.10" + [[example]] name = "simple_app" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..fb9f49e --- /dev/null +++ b/build.rs @@ -0,0 +1,9 @@ +use std::io::Result; + +fn main() -> Result<()> { + tonic_build::configure() + .build_server(false) + .compile(&["proto/nacos_grpc_service.proto"], &["proto/"])?; + + Ok(()) +} diff --git a/src/_.rs b/src/_.rs deleted file mode 100644 index 722356e..0000000 --- a/src/_.rs +++ /dev/null @@ -1,230 +0,0 @@ -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Metadata { - #[prost(string, tag = "3")] - pub r#type: ::prost::alloc::string::String, - #[prost(string, tag = "8")] - pub client_ip: ::prost::alloc::string::String, - #[prost(map = "string, string", tag = "7")] - pub headers: - ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>, -} -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Payload { - #[prost(message, optional, tag = "2")] - pub metadata: ::core::option::Option, - #[prost(message, optional, tag = "3")] - pub body: ::core::option::Option<::prost_types::Any>, -} -/// Generated client implementations. -pub mod request_client { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::http::Uri; - use tonic::codegen::*; - #[derive(Debug, Clone)] - pub struct RequestClient { - inner: tonic::client::Grpc, - } - impl RequestClient { - /// Attempt to create a new client by connecting to a given endpoint. - pub async fn connect(dst: D) -> Result - where - D: TryInto, - D::Error: Into, - { - let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; - Ok(Self::new(conn)) - } - } - impl RequestClient - where - T: tonic::client::GrpcService, - T::Error: Into, - T::ResponseBody: Body + Send + 'static, - ::Error: Into + Send, - { - pub fn new(inner: T) -> Self { - let inner = tonic::client::Grpc::new(inner); - Self { inner } - } - pub fn with_origin(inner: T, origin: Uri) -> Self { - let inner = tonic::client::Grpc::with_origin(inner, origin); - Self { inner } - } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> RequestClient> - where - F: tonic::service::Interceptor, - T::ResponseBody: Default, - T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, - >, - >>::Error: - Into + Send + Sync, - { - RequestClient::new(InterceptedService::new(inner, interceptor)) - } - /// Compress requests with the given encoding. - /// - /// This requires the server to support it otherwise it might respond with an - /// error. - #[must_use] - pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.send_compressed(encoding); - self - } - /// Enable decompressing responses. - #[must_use] - pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.accept_compressed(encoding); - self - } - /// Limits the maximum size of a decoded message. - /// - /// Default: `4MB` - #[must_use] - pub fn max_decoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_decoding_message_size(limit); - self - } - /// Limits the maximum size of an encoded message. - /// - /// Default: `usize::MAX` - #[must_use] - pub fn max_encoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_encoding_message_size(limit); - self - } - /// Sends a commonRequest - pub async fn request( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result, tonic::Status> { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static("/Request/request"); - let mut req = request.into_request(); - req.extensions_mut() - .insert(GrpcMethod::new("Request", "request")); - self.inner.unary(req, path, codec).await - } - } -} -/// Generated client implementations. -pub mod bi_request_stream_client { - #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] - use tonic::codegen::http::Uri; - use tonic::codegen::*; - #[derive(Debug, Clone)] - pub struct BiRequestStreamClient { - inner: tonic::client::Grpc, - } - impl BiRequestStreamClient { - /// Attempt to create a new client by connecting to a given endpoint. - pub async fn connect(dst: D) -> Result - where - D: TryInto, - D::Error: Into, - { - let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; - Ok(Self::new(conn)) - } - } - impl BiRequestStreamClient - where - T: tonic::client::GrpcService, - T::Error: Into, - T::ResponseBody: Body + Send + 'static, - ::Error: Into + Send, - { - pub fn new(inner: T) -> Self { - let inner = tonic::client::Grpc::new(inner); - Self { inner } - } - pub fn with_origin(inner: T, origin: Uri) -> Self { - let inner = tonic::client::Grpc::with_origin(inner, origin); - Self { inner } - } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> BiRequestStreamClient> - where - F: tonic::service::Interceptor, - T::ResponseBody: Default, - T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, - >, - >>::Error: - Into + Send + Sync, - { - BiRequestStreamClient::new(InterceptedService::new(inner, interceptor)) - } - /// Compress requests with the given encoding. - /// - /// This requires the server to support it otherwise it might respond with an - /// error. - #[must_use] - pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.send_compressed(encoding); - self - } - /// Enable decompressing responses. - #[must_use] - pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { - self.inner = self.inner.accept_compressed(encoding); - self - } - /// Limits the maximum size of a decoded message. - /// - /// Default: `4MB` - #[must_use] - pub fn max_decoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_decoding_message_size(limit); - self - } - /// Limits the maximum size of an encoded message. - /// - /// Default: `usize::MAX` - #[must_use] - pub fn max_encoding_message_size(mut self, limit: usize) -> Self { - self.inner = self.inner.max_encoding_message_size(limit); - self - } - /// Sends a biStreamRequest - pub async fn request_bi_stream( - &mut self, - request: impl tonic::IntoStreamingRequest, - ) -> std::result::Result< - tonic::Response>, - tonic::Status, - > { - self.inner.ready().await.map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static("/BiRequestStream/requestBiStream"); - let mut req = request.into_streaming_request(); - req.extensions_mut() - .insert(GrpcMethod::new("BiRequestStream", "requestBiStream")); - self.inner.streaming(req, path, codec).await - } - } -} diff --git a/src/lib.rs b/src/lib.rs index 80efc80..70e964a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,10 +132,10 @@ mod config; mod naming; #[allow(dead_code)] -#[path = ""] mod nacos_proto { - #[path = "_.rs"] - pub mod v2; + pub mod v2 { + tonic::include_proto!("_"); + } } #[cfg(test)] diff --git a/tests/proto_build.rs b/tests/proto_build.rs deleted file mode 100644 index f1a7b4c..0000000 --- a/tests/proto_build.rs +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// This test helps to keep files generated and used by tonic_build(proto) update to date. -// If the generated files has been changed, please commit they. -#[test] -#[ignore] -fn build_proto() { - tonic_build::configure() - .build_client(true) - .build_server(false) - .build_transport(true) - .out_dir("src") - .compile(&["./proto/nacos_grpc_service.proto"], &["./proto"]) - .unwrap(); -}