-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathschema.rs
More file actions
71 lines (64 loc) · 2.36 KB
/
schema.rs
File metadata and controls
71 lines (64 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use crate::cli::{DIFF_SUBCMD, FORMAT_OPT};
use crate::database::{Api, OpenApiConfig};
use crate::utils::warn_missing_subcommand;
use clap::ArgMatches;
use color_eyre::eyre::Result;
use similar::TextDiff;
use std::io;
fn proc_schema_diff(subcmd_args: &ArgMatches, rest_cfg: &OpenApiConfig, api: &Api) -> Result<()> {
let show_version = subcmd_args.is_present("version");
let fmt = subcmd_args.value_of(FORMAT_OPT).unwrap();
let header1 = "CLI";
let header2 = "Server";
let server: String;
let local: String;
if show_version {
server = api.get_schema_version(rest_cfg)?;
local = api.get_local_schema_version()?;
} else {
server = api.get_schema(rest_cfg, fmt)?;
local = api.get_local_schema(fmt)?;
}
let diff = TextDiff::from_lines(&local, &server);
diff.unified_diff()
.header(header1, header2)
.to_writer(io::stdout())?;
Ok(())
}
fn proc_schema_local(subcmd_args: &ArgMatches, _rest_cfg: &OpenApiConfig, api: &Api) -> Result<()> {
let show_version = subcmd_args.is_present("version");
let fmt = subcmd_args.value_of(FORMAT_OPT).unwrap();
if show_version {
let version = api.get_local_schema_version()?;
println!("{version}");
} else {
let schema = api.get_local_schema(fmt)?;
println!("{schema}");
}
Ok(())
}
fn proc_schema_server(subcmd_args: &ArgMatches, rest_cfg: &OpenApiConfig, api: &Api) -> Result<()> {
let show_version = subcmd_args.is_present("version");
let fmt = subcmd_args.value_of(FORMAT_OPT).unwrap();
if show_version {
let version = api.get_schema_version(rest_cfg)?;
println!("{version}");
} else {
let schema = api.get_schema(rest_cfg, fmt)?;
println!("{schema}");
}
Ok(())
}
pub fn process_schema_command(subcmd_args: &ArgMatches, rest_cfg: &OpenApiConfig) -> Result<()> {
let api = Api::new();
if let Some(subcmd_args) = subcmd_args.subcommand_matches(DIFF_SUBCMD) {
proc_schema_diff(subcmd_args, rest_cfg, &api)?;
} else if let Some(subcmd_args) = subcmd_args.subcommand_matches("local") {
proc_schema_local(subcmd_args, rest_cfg, &api)?;
} else if let Some(subcmd_args) = subcmd_args.subcommand_matches("server") {
proc_schema_server(subcmd_args, rest_cfg, &api)?;
} else {
warn_missing_subcommand("schema");
}
Ok(())
}