rp_cli/
api_types.rs

1pub mod execute {
2    use serde::{Deserialize, Serialize};
3
4    #[derive(Serialize)]
5    pub struct Request {
6        #[serde(rename(serialize = "crateType"))]
7        pub crate_type: String,
8        pub tests: bool,
9        pub mode: String,
10        pub channel: String,
11        pub edition: String,
12        pub backtrace: bool,
13        pub code: String,
14    }
15
16    #[derive(Debug, Deserialize)]
17    pub struct Response {
18        #[serde(default)]
19        pub success: bool,
20        #[serde(default)]
21        pub stdout: String,
22        #[serde(default)]
23        pub stderr: String,
24        #[serde(default)]
25        pub error: String,
26    }
27
28    impl Response {
29        pub fn is_error(&self) -> bool {
30            !self.success && !self.error.is_empty()
31        }
32    }
33}
34
35pub mod compile {
36    use serde::{Deserialize, Serialize};
37
38    #[derive(Serialize)]
39    pub struct Request {
40        #[serde(rename(serialize = "crateType"))]
41        pub crate_type: String,
42        pub tests: bool,
43        pub mode: String,
44        pub channel: String,
45        pub edition: String,
46        pub backtrace: bool,
47        pub code: String,
48        #[serde(rename(serialize = "assemblyFlavor"))]
49        pub assembly_flavor: String,
50        #[serde(rename(serialize = "demangleAssembly"))]
51        pub demangle_assembly: String,
52        #[serde(rename(serialize = "processAssembly"))]
53        pub process_assembly: String,
54        pub target: String,
55    }
56
57    #[derive(Debug, Deserialize)]
58    pub struct Response {
59        #[serde(default)]
60        pub success: bool,
61        #[serde(default)]
62        pub stdout: String,
63        #[serde(default)]
64        pub stderr: String,
65        #[serde(default)]
66        pub error: String,
67    }
68}
69
70pub mod fmt {
71    use serde::{Deserialize, Serialize};
72
73    #[derive(Serialize)]
74    pub struct Request {
75        pub edition: String,
76        pub code: String,
77    }
78
79    #[derive(Debug, Deserialize)]
80    pub struct Response {
81        #[serde(default)]
82        pub success: bool,
83        #[serde(default)]
84        pub stdout: String,
85        #[serde(default)]
86        pub stderr: String,
87        #[serde(default)]
88        pub code: String,
89    }
90
91    impl Response {
92        pub fn is_error(&self) -> bool {
93            !self.success
94        }
95    }
96}
97
98pub mod share {
99    use serde::{Deserialize, Serialize};
100
101    #[derive(Serialize)]
102    pub struct Request {
103        pub code: String,
104    }
105
106    #[derive(Debug, Deserialize)]
107    pub struct Response {
108        #[serde(default)]
109        pub id: String,
110        #[serde(default)]
111        pub url: String,
112        #[serde(default)]
113        pub code: String,
114    }
115
116    impl Response {
117        // Permalink to the playground
118        pub fn playground_url(&self) -> String {
119            // TODO: be const
120            // TODO: relay version, mode, edition
121            let url = format!(
122                "https://play.rust-lang.org/?version={}&mode={}&edition={}&gist={}",
123                "stable", "debug", "2021", self.id
124            );
125
126            url
127        }
128
129        // Direct link to the gist
130        pub fn gist_url(&self) -> String {
131            // TODO: be const
132            let url = format!("https://gist.github.com/{}", self.id);
133
134            url
135        }
136
137        // TODO: Embedded code in link
138
139        // TODO: Open a new thread in the Rust user forum
140    }
141}
142
143pub mod download {
144    use serde::{Deserialize, Serialize};
145
146    #[derive(Serialize)]
147    pub struct Request {
148        pub id: String,
149    }
150
151    #[derive(Debug, Deserialize)]
152    pub struct Response {
153        #[serde(default)]
154        pub id: String,
155        #[serde(default)]
156        pub url: String,
157        #[serde(default)]
158        pub code: String,
159    }
160}
161
162#[cfg(test)]
163mod test {
164    use super::execute;
165
166    #[test]
167    fn test_response_is_error() {
168        let resp = execute::Response {
169            success: false,
170            stdout: "".to_string(),
171            stderr: "".to_string(),
172            error: "this is error".to_string(),
173        };
174
175        assert_eq!(true, resp.is_error());
176    }
177}