sdf_metadata/metadata/states/
system_state.rs1use crate::wit::states::SystemState;
2
3impl SystemState {
4 pub fn validate(&self) -> Result<(), crate::util::validation_error::ValidationError> {
5 if self.name.is_empty() && self.system.is_empty() {
6 return Err(crate::util::validation_error::ValidationError::new(
7 "empty system state found. state name and system cannot be empty",
8 ));
9 }
10
11 if self.name.is_empty() {
12 return Err(crate::util::validation_error::ValidationError::new(
13 "Name must be specified for system state",
14 ));
15 }
16
17 if self.system.is_empty() {
18 return Err(crate::util::validation_error::ValidationError::new(
19 "System must be specified for system state `name`",
20 ));
21 }
22
23 Ok(())
24 }
25}
26
27#[cfg(test)]
28mod test {
29 use crate::{wit::states::SystemState, util::validation_error::ValidationError};
30
31 #[test]
32 fn test_validate_rejects_empty_system() {
33 let state = SystemState {
34 name: "my-state".to_string(),
35 system: "".to_string(),
36 };
37
38 assert_eq!(
39 state.validate(),
40 Err(ValidationError::new(
41 "System must be specified for system state `name`"
42 ))
43 );
44 }
45
46 #[test]
47 fn test_validate_rejects_empty_name() {
48 let state = SystemState {
49 name: "".to_string(),
50 system: "my-system".to_string(),
51 };
52
53 assert_eq!(
54 state.validate(),
55 Err(ValidationError::new(
56 "Name must be specified for system state"
57 ))
58 );
59 }
60
61 #[test]
62 fn test_validate_rejects_empty_system_state() {
63 let state = SystemState {
64 name: "".to_string(),
65 system: "".to_string(),
66 };
67
68 assert_eq!(
69 state.validate(),
70 Err(ValidationError::new(
71 "empty system state found. state name and system cannot be empty"
72 ))
73 );
74 }
75
76 #[test]
77 fn test_validate_accepts_valid_system_state() {
78 let state = SystemState {
79 name: "my-state".to_string(),
80 system: "my-system".to_string(),
81 };
82
83 assert_eq!(state.validate(), Ok(()));
84 }
85}