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 pub fn playground_url(&self) -> String {
119 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 pub fn gist_url(&self) -> String {
131 let url = format!("https://gist.github.com/{}", self.id);
133
134 url
135 }
136
137 }
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}