fix(build): snake_case service names (#190)
This commit is contained in:
committed by
Lucio Franco
parent
82facb6283
commit
3a5c66d5f2
@@ -1,11 +1,11 @@
|
||||
use crate::generate_doc_comments;
|
||||
use crate::{generate_doc_comments, naive_snake_case};
|
||||
use proc_macro2::TokenStream;
|
||||
use prost_build::{Method, Service};
|
||||
use quote::{format_ident, quote};
|
||||
|
||||
pub(crate) fn generate(service: &Service, proto: &str) -> TokenStream {
|
||||
let service_ident = quote::format_ident!("{}Client", service.name);
|
||||
let client_mod = quote::format_ident!("{}_client", service.name.to_ascii_lowercase());
|
||||
let client_mod = quote::format_ident!("{}_client", naive_snake_case(&service.name));
|
||||
let methods = generate_methods(service, proto);
|
||||
|
||||
let connect = generate_connect(&service_ident);
|
||||
|
||||
@@ -321,3 +321,31 @@ fn replace_wellknown(proto_path: &str, method: &Method) -> (TokenStream, TokenSt
|
||||
|
||||
(request, response)
|
||||
}
|
||||
|
||||
fn naive_snake_case(name: &str) -> String {
|
||||
let mut s = String::new();
|
||||
let mut it = name.chars().peekable();
|
||||
|
||||
while let Some(x) = it.next() {
|
||||
s.push(x.to_ascii_lowercase());
|
||||
if let Some(y) = it.peek() {
|
||||
if y.is_uppercase() {
|
||||
s.push('_');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_snake_case() {
|
||||
for case in &[
|
||||
("Service", "service"),
|
||||
("ThatHasALongName", "that_has_a_long_name"),
|
||||
("greeter", "greeter"),
|
||||
("ABCServiceX", "a_b_c_service_x"),
|
||||
] {
|
||||
assert_eq!(naive_snake_case(case.0), case.1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::{generate_doc_comment, generate_doc_comments};
|
||||
use crate::{generate_doc_comment, generate_doc_comments, naive_snake_case};
|
||||
use proc_macro2::{Span, TokenStream};
|
||||
use prost_build::{Method, Service};
|
||||
use quote::quote;
|
||||
@@ -9,7 +9,7 @@ pub(crate) fn generate(service: &Service, proto_path: &str) -> TokenStream {
|
||||
|
||||
let server_service = quote::format_ident!("{}Server", service.name);
|
||||
let server_trait = quote::format_ident!("{}", service.name);
|
||||
let server_mod = quote::format_ident!("{}_server", service.name.to_ascii_lowercase());
|
||||
let server_mod = quote::format_ident!("{}_server", naive_snake_case(&service.name));
|
||||
let generated_trait = generate_trait(service, proto_path, server_trait.clone());
|
||||
let service_doc = generate_doc_comments(&service.comments.leading);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user