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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use somedoc::write::OutputFormat;
use std::error::Error;
use std::fmt::{Display, Formatter};
use std::path::PathBuf;
use std::str::FromStr;
#[derive(Debug)]
pub struct Options {
pub use_color: bool,
}
#[derive(Debug)]
pub enum Command {
Lint(FileCommand, Options),
Validate(FileCommand, Options),
Convert(TransformCommand, Options),
Document(DocumentCommand, Options),
}
#[derive(Debug)]
pub enum FileFormat {
Json,
Smithy,
Uml,
}
#[derive(Debug)]
pub struct File {
pub file_name: Option<PathBuf>,
pub format: FileFormat,
}
#[derive(Debug)]
pub struct FileCommand {
pub input_file: File,
}
#[derive(Debug)]
pub struct TransformCommand {
pub input_file: File,
pub output_file: File,
pub namespace: Option<String>,
}
#[derive(Debug)]
pub struct DocumentCommand {
pub input_file: File,
pub output_file: File,
pub output_format: OutputFormat,
}
#[derive(Debug)]
pub struct FormatStringError {
failed: String,
}
impl Display for FileFormat {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
FileFormat::Json => "json",
FileFormat::Smithy => "smithy",
FileFormat::Uml => "uml",
}
)
}
}
impl FromStr for FileFormat {
type Err = FormatStringError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"json" => Ok(FileFormat::Json),
"smithy" => Ok(FileFormat::Smithy),
"uml" => Ok(FileFormat::Uml),
_ => Err(FormatStringError::new(s)),
}
}
}
impl Display for FormatStringError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "Value '{}' is not a valid format", self.failed)
}
}
impl Error for FormatStringError {}
impl FormatStringError {
pub fn new(failed: &str) -> Self {
Self {
failed: failed.to_string(),
}
}
}
pub mod actions;
pub mod command_line;
pub mod report;