|
19 | 19 | extern crate api_generator;
|
20 | 20 | extern crate dialoguer;
|
21 | 21 |
|
22 |
| -use api_generator::{generator, rest_spec}; |
23 |
| -use dialoguer::Input; |
24 |
| -use std::{ |
25 |
| - fs::{self, File}, |
26 |
| - io::Write, |
27 |
| - path::PathBuf, |
28 |
| -}; |
| 22 | +use anyhow::{bail, Context}; |
| 23 | +use api_generator::generator; |
| 24 | +use std::{fs, path::PathBuf}; |
29 | 25 |
|
30 |
| -fn main() -> Result<(), failure::Error> { |
| 26 | +fn main() -> anyhow::Result<()> { |
31 | 27 | simple_logger::SimpleLogger::new()
|
32 | 28 | .with_level(log::LevelFilter::Info)
|
33 | 29 | .init()
|
34 | 30 | .unwrap();
|
35 | 31 |
|
36 |
| - // This must be run from the repo root directory, with cargo make generate-api |
37 |
| - let download_dir = fs::canonicalize(PathBuf::from("./api_generator/rest_specs"))?; |
38 |
| - let generated_dir = fs::canonicalize(PathBuf::from("./elasticsearch/src"))?; |
39 |
| - let last_downloaded_version = |
40 |
| - PathBuf::from("./api_generator/rest_specs/last_downloaded_version"); |
41 |
| - |
42 |
| - let mut download_specs = false; |
43 |
| - let mut answer = String::new(); |
44 |
| - let default_branch = if last_downloaded_version.exists() { |
45 |
| - fs::read_to_string(&last_downloaded_version)? |
46 |
| - } else { |
47 |
| - String::from("master") |
48 |
| - }; |
49 |
| - let mut branch = default_branch.clone(); |
| 32 | + let stack_version = std::env::var("STACK_VERSION").context("Missing STACK_VERSION env var")?; |
50 | 33 |
|
51 |
| - while answer != "y" && answer != "n" { |
52 |
| - answer = Input::new() |
53 |
| - .default(String::from("n")) |
54 |
| - .show_default(false) |
55 |
| - .with_prompt("Download rest specifications [y/N]") |
56 |
| - .interact() |
57 |
| - .unwrap() |
58 |
| - .to_lowercase(); |
59 |
| - download_specs = answer == "y"; |
60 |
| - } |
61 |
| - |
62 |
| - if download_specs { |
63 |
| - branch = Input::new() |
64 |
| - .default(default_branch.clone()) |
65 |
| - .show_default(false) |
66 |
| - .with_prompt( |
67 |
| - format!( |
68 |
| - "Branch to download specification from [default {}]", |
69 |
| - default_branch |
70 |
| - ) |
71 |
| - .as_str(), |
72 |
| - ) |
73 |
| - .interact() |
74 |
| - .unwrap(); |
| 34 | + // This must be run from the repo root directory, with cargo make generate-api |
| 35 | + let download_dir = PathBuf::from(&format!("./checkout/{}/rest-api-spec/api", stack_version)); |
75 | 36 |
|
76 |
| - fs::remove_dir_all(&download_dir)?; |
77 |
| - fs::create_dir_all(&download_dir)?; |
78 |
| - rest_spec::download_specs(&branch, &download_dir)?; |
79 |
| - File::create(&last_downloaded_version)?.write_all(branch.as_bytes())?; |
| 37 | + if !download_dir.is_dir() { |
| 38 | + bail!("No specs found at {:?}", download_dir); |
80 | 39 | }
|
81 | 40 |
|
82 |
| - // only offer to generate if there are downloaded specs |
83 |
| - if download_dir |
84 |
| - .read_dir() |
85 |
| - .map(|mut r| r.next().is_some()) |
86 |
| - .unwrap_or(false) |
87 |
| - { |
88 |
| - let mut generate_code = true; |
89 |
| - answer = String::new(); |
90 |
| - while answer != "y" && answer != "n" { |
91 |
| - answer = Input::new() |
92 |
| - .default(String::from("y")) |
93 |
| - .show_default(false) |
94 |
| - .with_prompt( |
95 |
| - format!("Generate code from rest specifications {} [Y/n]", branch).as_str(), |
96 |
| - ) |
97 |
| - .interact() |
98 |
| - .unwrap() |
99 |
| - .to_lowercase(); |
100 |
| - generate_code = answer == "y"; |
101 |
| - } |
102 |
| - |
103 |
| - if generate_code { |
104 |
| - // Delete previously generated files |
105 |
| - let mut generated = generated_dir.clone(); |
106 |
| - generated.push(generator::GENERATED_TOML); |
107 |
| - |
108 |
| - if generated.exists() { |
109 |
| - let files = |
110 |
| - toml::from_str::<generator::GeneratedFiles>(&fs::read_to_string(generated)?)?; |
| 41 | + // let download_dir = fs::canonicalize(PathBuf::from("./api_generator/rest_specs"))?; |
| 42 | + let generated_dir = fs::canonicalize(PathBuf::from("./elasticsearch/src"))?; |
111 | 43 |
|
112 |
| - for f in files.written { |
113 |
| - let mut generated_file = generated_dir.clone(); |
114 |
| - generated_file.push(f); |
115 |
| - let _ = fs::remove_file(generated_file); // ignore missing files |
116 |
| - } |
117 |
| - } |
| 44 | + // Delete previously generated files |
| 45 | + let mut generated = generated_dir.clone(); |
| 46 | + generated.push(generator::GENERATED_TOML); |
| 47 | + if generated.exists() { |
| 48 | + let files = toml::from_str::<generator::GeneratedFiles>(&fs::read_to_string(generated)?)?; |
118 | 49 |
|
119 |
| - // and generate! |
120 |
| - generator::generate(&branch, &download_dir, &generated_dir)?; |
| 50 | + for f in files.written { |
| 51 | + let mut generated_file = generated_dir.clone(); |
| 52 | + generated_file.push(f); |
| 53 | + let _ = fs::remove_file(generated_file); // ignore missing files |
121 | 54 | }
|
122 | 55 | }
|
123 | 56 |
|
| 57 | + // and generate! |
| 58 | + generator::generate(&download_dir, &generated_dir)?; |
| 59 | + |
124 | 60 | Ok(())
|
125 | 61 | }
|
0 commit comments