1use super::{SbatchOption, SbatchOptionError};
2
3fn validate_str(s: &str) -> Result<(), SbatchOptionError> {
6 if s.trim().is_empty() {
7 Err(SbatchOptionError::EmptyString)
8 } else if s != s.trim() {
9 Err(SbatchOptionError::LeadingOrTrailingSpaces)
10 } else {
11 Ok(())
12 }
13}
14
15impl SbatchOption {
16 pub fn validate(&self) -> Result<(), SbatchOptionError> {
47 match self {
48 SbatchOption::Account(value) => validate_str(value),
49 SbatchOption::AcctgFreq(value) => validate_str(value),
50 SbatchOption::Array(value) => validate_str(value),
51 SbatchOption::Batch(value) => validate_str(value),
52 SbatchOption::Bb(value) => validate_str(value),
53 SbatchOption::Bbf(value) => validate_str(value),
54 SbatchOption::Begin(value) => validate_str(value),
55 SbatchOption::Chdir(value) => validate_str(value),
56 SbatchOption::ClusterConstraint(value) => validate_str(value),
57 SbatchOption::Clusters(value) => validate_str(value),
58 SbatchOption::Comment(value) => validate_str(value),
59 SbatchOption::Constraint(value) => validate_str(value),
60 SbatchOption::Container(value) => validate_str(value),
61 SbatchOption::ContainerID(value) => validate_str(value),
62 SbatchOption::Contiguous => Ok(()),
63 SbatchOption::CoreSpec(value) => validate_str(value),
64 SbatchOption::CoresPerSocket(value) => validate_str(value),
65 SbatchOption::CPUFreq(value) => validate_str(value),
66 SbatchOption::CPUsPerGPU(value) => validate_str(value),
67 SbatchOption::CPUsPerTask(value) => validate_str(value),
68 SbatchOption::Deadline(value) => validate_str(value),
69 SbatchOption::DelayBoot(value) => validate_str(value),
70 SbatchOption::Dependency(value) => validate_str(value),
71 SbatchOption::Distribution(value) => validate_str(value),
72 SbatchOption::Error(value) => validate_str(value),
73 SbatchOption::Exclude(value) => validate_str(value),
74 SbatchOption::Exclusive(Some(value)) => validate_str(value),
75 SbatchOption::Exclusive(None) => Ok(()),
76 SbatchOption::Export(value) => validate_str(value),
77 SbatchOption::ExportFile(value) => validate_str(value),
78 SbatchOption::Extra(value) => validate_str(value),
79 SbatchOption::ExtraNodeInfo(value) => validate_str(value),
80 SbatchOption::GetUserEnv(Some(value)) => validate_str(value),
81 SbatchOption::GetUserEnv(None) => Ok(()),
82 SbatchOption::GID(value) => validate_str(value),
83 SbatchOption::GPUBind(value) => validate_str(value),
84 SbatchOption::GPUFreq(value) => validate_str(value),
85 SbatchOption::GPUs(value) => validate_str(value),
86 SbatchOption::GPUsPerNode(value) => validate_str(value),
87 SbatchOption::GPUsPerSocket(value) => validate_str(value),
88 SbatchOption::GPUsPerTask(value) => validate_str(value),
89 SbatchOption::Gres(value) => validate_str(value),
90 SbatchOption::GresFlags(value) => validate_str(value),
91 SbatchOption::Help => Ok(()),
92 SbatchOption::Hint(value) => validate_str(value),
93 SbatchOption::Hold => Ok(()),
94 SbatchOption::IgnorePbs => Ok(()),
95 SbatchOption::Input(value) => validate_str(value),
96 SbatchOption::JobName(value) => validate_str(value),
97 SbatchOption::KillOnInvalidDep(value) => validate_str(value),
98 SbatchOption::Licenses(value) => validate_str(value),
99 SbatchOption::MailType(value) => validate_str(value),
100 SbatchOption::MailUser(value) => validate_str(value),
101 SbatchOption::McsLabel(value) => validate_str(value),
102 SbatchOption::Mem(value) => validate_str(value),
103 SbatchOption::MemBind(value) => validate_str(value),
104 SbatchOption::MemPerCPU(value) => validate_str(value),
105 SbatchOption::MemPerGPU(value) => validate_str(value),
106 SbatchOption::MinCPUs(value) => validate_str(value),
107 SbatchOption::Network(value) => validate_str(value),
108 SbatchOption::Nice(Some(value)) => validate_str(value),
109 SbatchOption::Nice(None) => Ok(()),
110 SbatchOption::NoKill(Some(value)) => validate_str(value),
111 SbatchOption::NoKill(None) => Ok(()),
112 SbatchOption::NoRequeue => Ok(()),
113 SbatchOption::NodeFile(value) => validate_str(value),
114 SbatchOption::NodeList(value) => validate_str(value),
115 SbatchOption::Nodes(value) => validate_str(value),
116 SbatchOption::NTasks(value) => validate_str(value),
117 SbatchOption::NTasksPerCore(value) => validate_str(value),
118 SbatchOption::NTasksPerGPU(value) => validate_str(value),
119 SbatchOption::NTasksPerNode(value) => validate_str(value),
120 SbatchOption::NTasksPerSocket(value) => validate_str(value),
121 SbatchOption::OOMKillStep(Some(value)) => validate_str(value),
122 SbatchOption::OOMKillStep(None) => Ok(()),
123 SbatchOption::OpenMode(value) => validate_str(value),
124 SbatchOption::Output(value) => validate_str(value),
125 SbatchOption::Overcommit => Ok(()),
126 SbatchOption::Oversubscribe => Ok(()),
127 SbatchOption::Parsable => Ok(()),
128 SbatchOption::Partition(value) => validate_str(value),
129 SbatchOption::Prefer(value) => validate_str(value),
130 SbatchOption::Priority(value) => validate_str(value),
131 SbatchOption::Profile(value) => validate_str(value),
132 SbatchOption::Propagate(Some(value)) => validate_str(value),
133 SbatchOption::Propagate(None) => Ok(()),
134 SbatchOption::Qos(value) => validate_str(value),
135 SbatchOption::Quiet => Ok(()),
136 SbatchOption::Reboot => Ok(()),
137 SbatchOption::Requeue => Ok(()),
138 SbatchOption::Reservation(value) => validate_str(value),
139 SbatchOption::ResvPorts(Some(value)) => validate_str(value),
140 SbatchOption::ResvPorts(None) => Ok(()),
141 SbatchOption::Segment(value) => validate_str(value),
142 SbatchOption::Signal(value) => validate_str(value),
143 SbatchOption::SocketsPerNode(value) => validate_str(value),
144 SbatchOption::SpreadJob => Ok(()),
145 SbatchOption::Stepmgr => Ok(()),
146 SbatchOption::Switches(value) => validate_str(value),
147 SbatchOption::TestOnly => Ok(()),
148 SbatchOption::ThreadSpec(value) => validate_str(value),
149 SbatchOption::ThreadsPerCore(value) => validate_str(value),
150 SbatchOption::Time(value) => validate_str(value),
151 SbatchOption::TimeMin(value) => validate_str(value),
152 SbatchOption::Tmp(value) => validate_str(value),
153 SbatchOption::TresBind(value) => validate_str(value),
154 SbatchOption::TresPerTask(value) => validate_str(value),
155 SbatchOption::UID(value) => validate_str(value),
156 SbatchOption::Usage => Ok(()),
157 SbatchOption::UseMinNodes => Ok(()),
158 SbatchOption::Verbose => Ok(()),
159 SbatchOption::Version => Ok(()),
160 SbatchOption::Wait => Ok(()),
161 SbatchOption::WaitAllNodes(value) => validate_str(value),
162 SbatchOption::WCKey(value) => validate_str(value),
163 SbatchOption::Wrap(_) => Ok(()), }
165 }
166}