Improve best-case performance for to_camel_case
This commit is contained in:
parent
902c55dade
commit
d15f9bd162
2 changed files with 9 additions and 7 deletions
14
src/lib.rs
14
src/lib.rs
|
@ -203,6 +203,8 @@ extern crate serde;
|
|||
|
||||
#[cfg(any(feature="iron-handlers", feature="rocket-handlers"))] extern crate serde_json;
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
||||
#[macro_use] mod macros;
|
||||
mod ast;
|
||||
pub mod parser;
|
||||
|
@ -296,22 +298,22 @@ impl<'a> From<Spanning<ParseError<'a>>> for GraphQLError<'a> {
|
|||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub fn to_camel_case(s: &str) -> String {
|
||||
let mut dest = String::new();
|
||||
pub fn to_camel_case<'a>(s: &'a str) -> Cow<'a, str> {
|
||||
let mut dest = Cow::Borrowed(s);
|
||||
|
||||
for (i, part) in s.split('_').enumerate() {
|
||||
if i > 0 && part.len() == 1 {
|
||||
dest.push_str(&part.to_uppercase());
|
||||
dest += Cow::Owned(part.to_uppercase());
|
||||
}
|
||||
else if i > 0 && part.len() > 1 {
|
||||
let first = part.chars().next().unwrap().to_uppercase().collect::<String>();
|
||||
let second = &part[1..];
|
||||
|
||||
dest.push_str(&first);
|
||||
dest.push_str(second);
|
||||
dest += Cow::Owned(first);
|
||||
dest += second;
|
||||
}
|
||||
else if i == 0 {
|
||||
dest.push_str(part);
|
||||
dest = Cow::Borrowed(part);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ macro_rules! graphql_input_object {
|
|||
) => {
|
||||
Some($name {
|
||||
$( $field_name: {
|
||||
let n: String = $crate::to_camel_case(stringify!($field_name));
|
||||
let n = $crate::to_camel_case(stringify!($field_name));
|
||||
let v: Option<&&$crate::InputValue> = $var.get(&n[..]);
|
||||
|
||||
match v {
|
||||
|
|
Loading…
Reference in a new issue