microde_application/
stop_request.rs1use crate::MicrodeError;
2
3#[derive(Debug, Clone, PartialEq, Eq, Default)]
5pub struct MicrodeStopRequest {
6 pub exit_code: Option<i32>,
7 pub error: Option<MicrodeError>,
8}
9
10impl MicrodeStopRequest {
11 pub const fn success() -> Self {
12 Self {
13 exit_code: None,
14 error: None,
15 }
16 }
17
18 pub const fn with_exit_code(exit_code: i32) -> Self {
19 Self {
20 exit_code: Some(exit_code),
21 error: None,
22 }
23 }
24
25 pub fn with_error(error: MicrodeError) -> Self {
26 Self {
27 exit_code: None,
28 error: Some(error),
29 }
30 }
31
32 pub fn with_exit_code_and_error(exit_code: i32, error: MicrodeError) -> Self {
33 Self {
34 exit_code: Some(exit_code),
35 error: Some(error),
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn constructors_capture_each_supported_shape() {
46 let error = MicrodeError::new("stop failed");
47
48 assert_eq!(MicrodeStopRequest::success(), MicrodeStopRequest::default());
49 assert_eq!(
50 MicrodeStopRequest::with_exit_code(42),
51 MicrodeStopRequest {
52 exit_code: Some(42),
53 error: None,
54 }
55 );
56 assert_eq!(
57 MicrodeStopRequest::with_error(error.clone()),
58 MicrodeStopRequest {
59 exit_code: None,
60 error: Some(error.clone()),
61 }
62 );
63 assert_eq!(
64 MicrodeStopRequest::with_exit_code_and_error(7, error.clone()),
65 MicrodeStopRequest {
66 exit_code: Some(7),
67 error: Some(error),
68 }
69 );
70 }
71}