diff --git a/Cargo.lock b/Cargo.lock index d04c5ac..5d4b5c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -330,12 +330,19 @@ name = "granc" version = "0.2.4" dependencies = [ "clap", - "granc_core", + "granc_core 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json", "tokio", "tonic", ] +[[package]] +name = "granc-tools" +version = "0.0.0" +dependencies = [ + "tonic-prost-build", +] + [[package]] name = "granc_core" version = "0.2.4" @@ -353,10 +360,29 @@ dependencies = [ "tokio-stream", "tonic", "tonic-prost", - "tonic-prost-build", "tonic-reflection", ] +[[package]] +name = "granc_core" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b70761ae61e50a3da701f80dec0a5768e43420895922e233894865ce3969cea" +dependencies = [ + "futures-util", + "http", + "http-body", + "prost", + "prost-reflect", + "prost-types", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tonic", + "tonic-prost", +] + [[package]] name = "h2" version = "0.4.13" diff --git a/Cargo.toml b/Cargo.toml index e20055b..98ef242 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["granc", "granc-core", "echo-service"] +members = ["granc", "granc-core", "granc-tools", "echo-service"] resolver = "2" [workspace.package] diff --git a/granc-core/Cargo.toml b/granc-core/Cargo.toml index 99d0580..fda4d0a 100644 --- a/granc-core/Cargo.toml +++ b/granc-core/Cargo.toml @@ -13,18 +13,10 @@ repository = { workspace = true } rust-version = { workspace = true } version = { workspace = true } -[features] -gen-proto = ["dep:tonic-prost-build"] - [lib] name = "granc_core" path = "src/lib.rs" -[[bin]] -name = "generate-reflection-service" -path = "bin/generate_reflection_service.rs" -required-features = ["gen-proto"] - [dependencies] futures-util = "0.3.31" http = "1.4.0" @@ -38,7 +30,6 @@ tokio = { workspace = true, features = ["sync"] } tokio-stream = "0.1.18" tonic = { workspace = true } tonic-prost = { workspace = true } -tonic-prost-build = { workspace = true, optional = true } [dev-dependencies] echo-service = { path = "../echo-service" } diff --git a/granc-core/src/reflection/generated/grpc.reflection.v1.rs b/granc-core/src/reflection/generated/grpc.reflection.v1.rs index ee42fa0..9f4cf62 100644 --- a/granc-core/src/reflection/generated/grpc.reflection.v1.rs +++ b/granc-core/src/reflection/generated/grpc.reflection.v1.rs @@ -7,11 +7,10 @@ pub struct ServerReflectionRequest { /// To use reflection service, the client should set one of the following /// fields in message_request. The server distinguishes requests by their /// defined field and then handles them using corresponding methods. - #[prost( - oneof = "server_reflection_request::MessageRequest", - tags = "3, 4, 5, 6, 7" - )] - pub message_request: ::core::option::Option, + #[prost(oneof = "server_reflection_request::MessageRequest", tags = "3, 4, 5, 6, 7")] + pub message_request: ::core::option::Option< + server_reflection_request::MessageRequest, + >, } /// Nested message and enum types in `ServerReflectionRequest`. pub mod server_reflection_request { @@ -67,11 +66,10 @@ pub struct ServerReflectionResponse { pub original_request: ::core::option::Option, /// The server sets one of the following fields according to the message_request /// in the request. - #[prost( - oneof = "server_reflection_response::MessageResponse", - tags = "4, 5, 6, 7" - )] - pub message_response: ::core::option::Option, + #[prost(oneof = "server_reflection_response::MessageResponse", tags = "4, 5, 6, 7")] + pub message_response: ::core::option::Option< + server_reflection_response::MessageResponse, + >, } /// Nested message and enum types in `ServerReflectionResponse`. pub mod server_reflection_response { @@ -153,10 +151,10 @@ pub mod server_reflection_client { dead_code, missing_docs, clippy::wildcard_imports, - clippy::let_unit_value + clippy::let_unit_value, )] - use tonic::codegen::http::Uri; use tonic::codegen::*; + use tonic::codegen::http::Uri; #[derive(Debug, Clone)] pub struct ServerReflectionClient { inner: tonic::client::Grpc, @@ -195,13 +193,14 @@ pub mod server_reflection_client { F: tonic::service::Interceptor, T::ResponseBody: Default, T: tonic::codegen::Service< - http::Request, - Response = http::Response< - >::ResponseBody, - >, + http::Request, + Response = http::Response< + >::ResponseBody, >, - >>::Error: - Into + std::marker::Send + std::marker::Sync, + >, + , + >>::Error: Into + std::marker::Send + std::marker::Sync, { ServerReflectionClient::new(InterceptedService::new(inner, interceptor)) } @@ -240,23 +239,33 @@ pub mod server_reflection_client { /// all related requests go to a single server. pub async fn server_reflection_info( &mut self, - request: impl tonic::IntoStreamingRequest, + request: impl tonic::IntoStreamingRequest< + Message = super::ServerReflectionRequest, + >, ) -> std::result::Result< tonic::Response>, tonic::Status, > { - self.inner.ready().await.map_err(|e| { - tonic::Status::unknown(format!("Service was not ready: {}", e.into())) - })?; + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/grpc.reflection.v1.ServerReflection/ServerReflectionInfo", ); let mut req = request.into_streaming_request(); - req.extensions_mut().insert(GrpcMethod::new( - "grpc.reflection.v1.ServerReflection", - "ServerReflectionInfo", - )); + req.extensions_mut() + .insert( + GrpcMethod::new( + "grpc.reflection.v1.ServerReflection", + "ServerReflectionInfo", + ), + ); self.inner.streaming(req, path, codec).await } } diff --git a/granc-tools/Cargo.toml b/granc-tools/Cargo.toml new file mode 100644 index 0000000..3ee8535 --- /dev/null +++ b/granc-tools/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "granc-tools" +edition = { workspace = true } +publish = false + +[features] +gen-proto = ["dep:tonic-prost-build"] + +[[bin]] +name = "generate-reflection-service" +path = "bin/generate_reflection_service.rs" +required-features = ["gen-proto"] + +[dependencies] +tonic-prost-build = { workspace = true, optional = true } diff --git a/granc-core/bin/generate_reflection_service.rs b/granc-tools/bin/generate_reflection_service.rs similarity index 89% rename from granc-core/bin/generate_reflection_service.rs rename to granc-tools/bin/generate_reflection_service.rs index a0b56cd..30c9fcd 100644 --- a/granc-core/bin/generate_reflection_service.rs +++ b/granc-tools/bin/generate_reflection_service.rs @@ -6,7 +6,7 @@ fn main() -> Result<(), Box> { println!("Generating Reflection Service types..."); let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - let out_dir = manifest_dir.join("src/reflection/generated"); + let out_dir = manifest_dir.join("../granc-core/src/reflection/generated"); let proto_file = manifest_dir.join("proto/reflection.proto"); let proto_folder = manifest_dir.join("proto"); diff --git a/granc-core/proto/reflection.proto b/granc-tools/proto/reflection.proto similarity index 100% rename from granc-core/proto/reflection.proto rename to granc-tools/proto/reflection.proto