Skip to content

Commit 2fbdabc

Browse files
committed
Fix Time enum variants
Relates: elastic/elasticsearch#49368 This commit fixes a bug in the rest specs with the Time enum. The values contain unit names in parentheses in the spec which results in incorrect enum variants and serde rename values being generated. A PR has been submitted to fix the rest spec, which will align with the fix applied in this commit
1 parent 21ff850 commit 2fbdabc

File tree

4 files changed

+38
-21
lines changed

4 files changed

+38
-21
lines changed

api_generator/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ dialoguer = "0.3.0"
1212
failure = "0.1.5"
1313
Inflector = "0.11.4"
1414
indicatif = "0.12.0"
15+
lazy_static = "1.4.0"
1516
quote = "~0.3"
1617
reduce = "0.1.2"
18+
regex = "1.3.1"
1719
reqwest = "~0.9"
1820
rustfmt-nightly="1.4.8"
1921
serde = "~1"

api_generator/src/api_generator/code_gen/params.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::api_generator::*;
22

33
use inflector::Inflector;
44
use quote::Tokens;
5+
use regex::Regex;
56

67
pub fn generate(api: &Api) -> Result<String, failure::Error> {
78
let mut tokens = quote::Tokens::new();
@@ -18,20 +19,30 @@ pub fn generate(api: &Api) -> Result<String, failure::Error> {
1819

1920
fn generate_param(tokens: &mut Tokens, e: &ApiEnum) {
2021
let name = syn::Ident::from(e.name.to_pascal_case());
21-
let renames = e
22+
let (renames, variants): (Vec<String>, Vec<syn::Ident>) = e
2223
.values
2324
.iter()
2425
.filter(|v| !v.is_empty())
25-
.collect::<Vec<_>>();
26-
let values: Vec<syn::Ident> = renames
27-
.iter()
28-
.map(|v| syn::Ident::from(v.to_pascal_case()))
29-
.collect();
26+
.map(|v| {
27+
if !v.contains("(") {
28+
(v.to_owned(), syn::Ident::from(v.to_pascal_case()))
29+
} else {
30+
lazy_static! {
31+
static ref PARENS_REGEX: Regex = Regex::new(r"^(.*?)\s*\(.*?\)\s*$").unwrap();
32+
}
33+
if let Some(c) = PARENS_REGEX.captures(v) {
34+
(c.get(1).unwrap().as_str().to_owned(), syn::Ident::from(c.get(1).unwrap().as_str().to_pascal_case()))
35+
} else {
36+
(v.to_owned(), syn::Ident::from(v.to_pascal_case()))
37+
}
38+
}
39+
})
40+
.unzip();
3041

3142
let generated_enum_tokens = quote!(
3243
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)]
3344
pub enum #name {
34-
#(#[serde(rename = #renames)] #values),*
45+
#(#[serde(rename = #renames)] #variants),*
3546
}
3647
);
3748

api_generator/src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
extern crate dialoguer;
2+
3+
#[macro_use]
4+
extern crate lazy_static;
5+
26
#[macro_use]
37
extern crate quote;
48

elasticsearch/src/generated/params.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,20 @@ pub enum SuggestMode {
139139
}
140140
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)]
141141
pub enum Time {
142-
#[serde(rename = "d (Days)")]
143-
DDays,
144-
#[serde(rename = "h (Hours)")]
145-
HHours,
146-
#[serde(rename = "m (Minutes)")]
147-
MMinutes,
148-
#[serde(rename = "s (Seconds)")]
149-
SSeconds,
150-
#[serde(rename = "ms (Milliseconds)")]
151-
MsMilliseconds,
152-
#[serde(rename = "micros (Microseconds)")]
153-
MicrosMicroseconds,
154-
#[serde(rename = "nanos (Nanoseconds)")]
155-
NanosNanoseconds,
142+
#[serde(rename = "d")]
143+
D,
144+
#[serde(rename = "h")]
145+
H,
146+
#[serde(rename = "m")]
147+
M,
148+
#[serde(rename = "s")]
149+
S,
150+
#[serde(rename = "ms")]
151+
Ms,
152+
#[serde(rename = "micros")]
153+
Micros,
154+
#[serde(rename = "nanos")]
155+
Nanos,
156156
}
157157
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone, Copy)]
158158
pub enum Type {

0 commit comments

Comments
 (0)