build: generate root crate paths correctly (#623)
We shouldn't append `proto_path` (`super` by default) if the path starts with `crate::`. Fixes https://github.com/hyperium/tonic/issues/548
This commit is contained in:
@@ -102,22 +102,28 @@ impl crate::Method for Method {
|
||||
proto_path: &str,
|
||||
compile_well_known_types: bool,
|
||||
) -> (TokenStream, TokenStream) {
|
||||
let request = if (self.input_proto_type.starts_with(".google.protobuf")
|
||||
&& !compile_well_known_types)
|
||||
let request = if (is_google_type(&self.input_proto_type) && !compile_well_known_types)
|
||||
|| self.input_type.starts_with("::")
|
||||
{
|
||||
self.input_type.parse::<TokenStream>().unwrap()
|
||||
} else if self.input_type.starts_with("crate::") {
|
||||
syn::parse_str::<syn::Path>(&self.input_type)
|
||||
.unwrap()
|
||||
.to_token_stream()
|
||||
} else {
|
||||
syn::parse_str::<syn::Path>(&format!("{}::{}", proto_path, self.input_type))
|
||||
.unwrap()
|
||||
.to_token_stream()
|
||||
};
|
||||
|
||||
let response = if (self.output_proto_type.starts_with(".google.protobuf")
|
||||
&& !compile_well_known_types)
|
||||
let response = if (is_google_type(&self.output_proto_type) && !compile_well_known_types)
|
||||
|| self.output_type.starts_with("::")
|
||||
{
|
||||
self.output_type.parse::<TokenStream>().unwrap()
|
||||
} else if self.output_type.starts_with("crate::") {
|
||||
syn::parse_str::<syn::Path>(&self.output_type)
|
||||
.unwrap()
|
||||
.to_token_stream()
|
||||
} else {
|
||||
syn::parse_str::<syn::Path>(&format!("{}::{}", proto_path, self.output_type))
|
||||
.unwrap()
|
||||
@@ -128,6 +134,10 @@ impl crate::Method for Method {
|
||||
}
|
||||
}
|
||||
|
||||
fn is_google_type(ty: &str) -> bool {
|
||||
ty.starts_with(".google.protobuf")
|
||||
}
|
||||
|
||||
struct ServiceGenerator {
|
||||
builder: Builder,
|
||||
clients: TokenStream,
|
||||
|
||||
Reference in New Issue
Block a user