Fix generated code and update example integration
Resolve `Result` ambiguity and lifetime issues in generated services. Use `file_stem` for proto filenames. Make `StatusBody` public in `roto-tonic` and update the `hello_world` build process.
This commit is contained in:
@@ -540,12 +540,12 @@ pub fn generate_rust_code(
|
||||
}
|
||||
}
|
||||
|
||||
let rust_file_name = format!("{}.rs", proto_name.replace(".proto", ""));
|
||||
let rust_file_name = format!("{}.rs", std::path::Path::new(proto_name).file_stem().unwrap().to_str().unwrap());
|
||||
|
||||
let mut output = String::new();
|
||||
output.push_str("// @generated by protoc-gen-roto — do not edit\n");
|
||||
output.push_str("#[allow(unused_imports)]\n\n");
|
||||
output.push_str("use roto_runtime::{ProtoAccessor, ProtoBuilder, Result, RotoError, read_varint, RepeatedFieldIterator};\n");
|
||||
output.push_str("use roto_runtime::{ProtoAccessor, ProtoBuilder, Result, RotoError, read_varint, RepeatedFieldIterator, RotoMessage};\n");
|
||||
output.push_str("use std::str;\n");
|
||||
output.push_str("use bytes::{Bytes, BytesMut, Buf, BufMut};\n");
|
||||
output.push_str("use tonic::{Request, Response, Status};\n");
|
||||
@@ -710,9 +710,9 @@ fn write_service(svc_proto: &ServiceDescriptorProto, output: &mut String) {
|
||||
output.push_str(&format!("impl Service<http::Request<BoxBody>> for {} {{\n", server_name));
|
||||
output.push_str(" type Response = http::Response<BoxBody>;\n");
|
||||
output.push_str(" type Error = std::convert::Infallible;\n");
|
||||
output.push_str(" type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send>>;\n\n");
|
||||
output.push_str(" type Future = Pin<Box<dyn Future<Output = std::result::Result<Self::Response, Self::Error>> + Send>>;\n\n");
|
||||
|
||||
output.push_str(" fn poll_ready(&mut self, _: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {\n");
|
||||
output.push_str(" fn poll_ready(&mut self, _: &mut Context<'_>) -> Poll<std::result::Result<(), Self::Error>> {\n");
|
||||
output.push_str(" Poll::Ready(Ok(()))\n");
|
||||
output.push_str(" }\n\n");
|
||||
|
||||
@@ -720,6 +720,7 @@ fn write_service(svc_proto: &ServiceDescriptorProto, output: &mut String) {
|
||||
output.push_str(" let inner = self.inner.clone();\n");
|
||||
output.push_str(" let pool = self.pool.clone();\n");
|
||||
output.push_str(" Box::pin(async move {\n");
|
||||
output.push_str(" let path = req.uri().path().to_string();\n");
|
||||
output.push_str(" let body = req.into_body();\n");
|
||||
output.push_str(" let mut buf = pool.get();\n");
|
||||
output.push_str(" let mut stream = body;\n");
|
||||
@@ -740,7 +741,6 @@ fn write_service(svc_proto: &ServiceDescriptorProto, output: &mut String) {
|
||||
output.push_str(" return Ok(http::Response::builder().status(200).body(res_body).unwrap());\n");
|
||||
output.push_str(" }\n\n");
|
||||
output.push_str(" let payload = bytes_vec.slice(5..);\n");
|
||||
output.push_str(" let path = req.uri().path();\n");
|
||||
output.push_str(" let mut routed = false;\n\n");
|
||||
|
||||
let mut methods = Vec::new();
|
||||
@@ -762,14 +762,14 @@ fn write_service(svc_proto: &ServiceDescriptorProto, output: &mut String) {
|
||||
output.push_str(" let res_body = BoxBody::new(StatusBody(Some(Bytes::from_static(&[0, 0, 0, 0, 0]))));\n");
|
||||
output.push_str(" return Ok(http::Response::builder().status(200).body(res_body).unwrap());\n");
|
||||
output.push_str(" }\n");
|
||||
output.push_str(" }};\n\n");
|
||||
output.push_str(" };\n\n");
|
||||
output.push_str(&format!(" let response = match inner.{}(Request::new(request_msg)).await {{\n", method_name));
|
||||
output.push_str(" Ok(res) => res,\n");
|
||||
output.push_str(" Err(e) => {\n");
|
||||
output.push_str(" let res_body = BoxBody::new(StatusBody(Some(Bytes::from_static(&[0, 0, 0, 0, 0]))));\n");
|
||||
output.push_str(" return Ok(http::Response::builder().status(200).body(res_body).unwrap());\n");
|
||||
output.push_str(" }\n");
|
||||
output.push_str(" }};\n\n");
|
||||
output.push_str(" };\n\n");
|
||||
output.push_str(" let response_msg = response.into_inner();\n");
|
||||
output.push_str(" let response_bytes = response_msg.bytes();\n");
|
||||
output.push_str(" let mut res_buf = pool.get();\n");
|
||||
|
||||
Reference in New Issue
Block a user