1use crate::props::*;
3
4str_enum!(CgroupDevicePolicy { Auto => "auto", Closed => "closed", Strict => "strict" });
5str_enum!(CgroupPressureWatch { No => "no", Yes => "yes", Auto => "auto", Skip => "skip" });
6str_enum!(CollectMode { Inactive => "inactive", InactiveOrFailed => "inactive-or-failed" });
7str_enum!(CpusetPartition { Member => "member", Root => "root", Isolated => "isolated" });
8str_enum!(EmergencyAction { None => "none", Exit => "exit", ExitForce => "exit-force", Reboot => "reboot", RebootForce => "reboot-force", RebootImmediate => "reboot-immediate", Poweroff => "poweroff", PoweroffForce => "poweroff-force", PoweroffImmediate => "poweroff-immediate", SoftReboot => "soft-reboot", SoftRebootForce => "soft-reboot-force", Kexec => "kexec", KexecForce => "kexec-force", Halt => "halt", HaltForce => "halt-force", HaltImmediate => "halt-immediate" });
9str_enum!(ExecCommandFlag { IgnoreFailure => "ignore-failure", Privileged => "privileged", NoSetuid => "no-setuid", NoEnvExpand => "no-env-expand", ViaShell => "via-shell" });
10str_enum!(ExecInput { Null => "null", Tty => "tty", TtyForce => "tty-force", TtyFail => "tty-fail", Socket => "socket", Fd => "fd", Data => "data", File => "file" });
11str_enum!(ExecKeyringMode { Inherit => "inherit", Private => "private", Shared => "shared" });
12str_enum!(ExecMemoryThp { Inherit => "inherit", Disable => "disable", Madvise => "madvise", System => "system" });
13str_enum!(ExecOutput { Inherit => "inherit", Null => "null", Tty => "tty", Kmsg => "kmsg", KmsgConsole => "kmsg+console", Journal => "journal", JournalConsole => "journal+console", Socket => "socket", Fd => "fd", File => "file", Append => "append", Truncate => "truncate" });
14str_enum!(ExecPreserveMode { No => "no", Yes => "yes", Restart => "restart", OnSuccess => "on-success" });
15str_enum!(ExecUtmpMode { Init => "init", Login => "login", User => "user" });
16str_enum!(JobMode { Fail => "fail", Lenient => "lenient", Replace => "replace", ReplaceIrreversibly => "replace-irreversibly", Isolate => "isolate", Flush => "flush", IgnoreDependencies => "ignore-dependencies", IgnoreRequirements => "ignore-requirements", Triggering => "triggering", RestartDependencies => "restart-dependencies" });
17str_enum!(KillMode { ControlGroup => "control-group", Process => "process", Mixed => "mixed", None => "none" });
18str_enum!(ManagedOomMode { Auto => "auto", Kill => "kill" });
19str_enum!(ManagedOomPreference { None => "none", Avoid => "avoid", Omit => "omit" });
20str_enum!(NotifyAccess { None => "none", Main => "main", Exec => "exec", All => "all" });
21str_enum!(OomPolicy { Continue => "continue", Stop => "stop", Kill => "kill" });
22str_enum!(PrivateBpf { No => "no", Yes => "yes" });
23str_enum!(PrivatePids { No => "no", Yes => "yes" });
24str_enum!(PrivateTmp { No => "no", Connected => "connected", Disconnected => "disconnected" });
25str_enum!(PrivateUsers { No => "no", Self_ => "self", Identity => "identity", Full => "full", Managed => "managed" });
26str_enum!(ProcSubset { All => "all", Pid => "pid" });
27str_enum!(ProtectControlGroups { No => "no", Yes => "yes", Private => "private", Strict => "strict" });
28str_enum!(ProtectHome { No => "no", Yes => "yes", ReadOnly => "read-only", Tmpfs => "tmpfs" });
29str_enum!(ProtectHostname { No => "no", Yes => "yes", Private => "private" });
30str_enum!(ProtectProc { Default => "default", Noaccess => "noaccess", Invisible => "invisible", Ptraceable => "ptraceable" });
31str_enum!(ProtectSystem { No => "no", Yes => "yes", Full => "full", Strict => "strict" });
32str_enum!(ServiceExitType { Main => "main", Cgroup => "cgroup" });
33str_enum!(ServiceRestart { No => "no", OnSuccess => "on-success", OnFailure => "on-failure", OnAbnormal => "on-abnormal", OnWatchdog => "on-watchdog", OnAbort => "on-abort", Always => "always" });
34str_enum!(ServiceRestartMode { Normal => "normal", Direct => "direct", Debug => "debug" });
35str_enum!(ServiceTimeoutFailureMode { Terminate => "terminate", Abort => "abort", Kill => "kill" });
36str_enum!(ServiceType { Simple => "simple", Forking => "forking", Oneshot => "oneshot", Dbus => "dbus", Notify => "notify", NotifyReload => "notify-reload", Idle => "idle", Exec => "exec" });
37
38unit_properties! {
39 AddRef: bool = "b",
40 After: Vec<String> = "as",
41 AllowIsolate: bool = "b",
42 AllowedCPUs: Vec<u8> = "ay",
43 AllowedMemoryNodes: Vec<u8> = "ay",
44 AmbientCapabilities: u64 = "t",
45 AppArmorProfile: SecurityLabel = "(bs)",
46 Asserts: Vec<Condition> = "a(sbbs)",
47 BPFDelegateAttachments: String = "s",
48 BPFDelegateCommands: String = "s",
49 BPFDelegateMaps: String = "s",
50 BPFDelegatePrograms: String = "s",
51 BPFProgram: Vec<BpfProgram> = "a(ss)",
52 Before: Vec<String> = "as",
53 BindLogSockets: bool = "b",
54 BindNetworkInterface: String = "s",
55 BindPaths: Vec<BindPath> = "a(ssbt)",
56 BindReadOnlyPaths: Vec<BindPath> = "a(ssbt)",
57 BindsTo: Vec<String> = "as",
58 BusName: String = "s",
59 CPUAffinity: Vec<u8> = "ay",
60 CPUAffinityFromNUMA: bool = "b",
61 CPUPressureThresholdUSec: Usec = "t",
62 CPUPressureWatch: CgroupPressureWatch = "s",
63 CPUQuotaPerSecUSec: Usec = "t",
64 CPUQuotaPeriodUSec: Usec = "t",
65 CPUSchedulingPolicy: i32 = "i",
66 CPUSchedulingPriority: i32 = "i",
67 CPUSchedulingResetOnFork: bool = "b",
68 CPUSetPartition: CpusetPartition = "s",
69 CPUWeight: u64 = "t",
70 CacheDirectory: Vec<String> = "as",
71 CacheDirectoryAccounting: bool = "b",
72 CacheDirectoryMode: u32 = "u",
73 CacheDirectoryQuota: DirectoryQuota = "(tus)",
74 CacheDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
75 CapabilityBoundingSet: u64 = "t",
76 CollectMode: CollectMode = "s",
77 Conditions: Vec<Condition> = "a(sbbs)",
78 ConfigurationDirectory: Vec<String> = "as",
79 ConfigurationDirectoryMode: u32 = "u",
80 Conflicts: Vec<String> = "as",
81 CoredumpFilter: u64 = "t",
82 CoredumpReceive: bool = "b",
83 DefaultDependencies: bool = "b",
84 Delegate: bool = "b",
85 DelegateControllers: Vec<String> = "as",
86 DelegateNamespaces: u64 = "t",
87 DelegateSubgroup: String = "s",
88 Description: String = "s",
89 DeviceAllow: Vec<DeviceAllow> = "a(ss)",
90 DevicePolicy: CgroupDevicePolicy = "s",
91 DisableControllers: Vec<String> = "as",
92 Documentation: Vec<String> = "as",
93 DynamicUser: bool = "b",
94 Environment: Vec<String> = "as",
95 EnvironmentFiles: Vec<EnvironmentFile> = "a(sb)",
96 ExecCondition: Vec<ExecCommand> = "a(sasb)",
97 ExecConditionEx: Vec<ExecCommandEx> = "a(sasas)",
98 ExecPaths: Vec<String> = "as",
99 ExecReload: Vec<ExecCommand> = "a(sasb)",
100 ExecReloadEx: Vec<ExecCommandEx> = "a(sasas)",
101 ExecReloadPost: Vec<ExecCommand> = "a(sasb)",
102 ExecReloadPostEx: Vec<ExecCommandEx> = "a(sasas)",
103 ExecSearchPath: Vec<String> = "as",
104 ExecStart: Vec<ExecCommand> = "a(sasb)",
105 ExecStartEx: Vec<ExecCommandEx> = "a(sasas)",
106 ExecStartPost: Vec<ExecCommand> = "a(sasb)",
107 ExecStartPostEx: Vec<ExecCommandEx> = "a(sasas)",
108 ExecStartPre: Vec<ExecCommand> = "a(sasb)",
109 ExecStartPreEx: Vec<ExecCommandEx> = "a(sasas)",
110 ExecStop: Vec<ExecCommand> = "a(sasb)",
111 ExecStopEx: Vec<ExecCommandEx> = "a(sasas)",
112 ExecStopPost: Vec<ExecCommand> = "a(sasb)",
113 ExecStopPostEx: Vec<ExecCommandEx> = "a(sasas)",
114 ExitType: ServiceExitType = "s",
115 ExtensionDirectories: Vec<String> = "as",
116 ExtensionImagePolicy: String = "s",
117 ExtensionImages: Vec<ExtensionImage> = "a(sba(ss))",
118 ExtraFileDescriptors: Vec<ExtraFd> = "a(hs)",
119 FailureAction: EmergencyAction = "s",
120 FailureActionExitStatus: i32 = "i",
121 FileDescriptorStoreMax: u32 = "u",
122 FileDescriptorStorePreserve: ExecPreserveMode = "s",
123 FinalKillSignal: i32 = "i",
124 Group: String = "s",
125 GuessMainPID: bool = "b",
126 IOAccounting: bool = "b",
127 IODeviceLatencyTargetUSec: Vec<DeviceValue> = "a(st)",
128 IODeviceWeight: Vec<DeviceValue> = "a(st)",
129 IOPressureThresholdUSec: Usec = "t",
130 IOPressureWatch: CgroupPressureWatch = "s",
131 IOReadBandwidthMax: Vec<DeviceValue> = "a(st)",
132 IOReadIOPSMax: Vec<DeviceValue> = "a(st)",
133 IOSchedulingClass: i32 = "i",
134 IOSchedulingPriority: i32 = "i",
135 IOWeight: u64 = "t",
136 IOWriteBandwidthMax: Vec<DeviceValue> = "a(st)",
137 IOWriteIOPSMax: Vec<DeviceValue> = "a(st)",
138 IPAccounting: bool = "b",
139 IPAddressAllow: Vec<IpPrefix> = "a(iayu)",
140 IPAddressDeny: Vec<IpPrefix> = "a(iayu)",
141 IPCNamespacePath: String = "s",
142 IPEgressFilterPath: Vec<String> = "as",
143 IPIngressFilterPath: Vec<String> = "as",
144 IgnoreOnIsolate: bool = "b",
145 IgnoreSIGPIPE: bool = "b",
146 ImportCredential: Vec<String> = "as",
147 ImportCredentialEx: Vec<ImportCredential> = "a(ss)",
148 InaccessibleDirectories: Vec<String> = "as",
149 InaccessiblePaths: Vec<String> = "as",
150 JobRunningTimeoutUSec: Usec = "t",
151 JobTimeoutAction: EmergencyAction = "s",
152 JobTimeoutRebootArgument: String = "s",
153 JobTimeoutUSec: Usec = "t",
154 JoinsNamespaceOf: Vec<String> = "as",
155 KeyringMode: ExecKeyringMode = "s",
156 KillMode: KillMode = "s",
157 KillSignal: i32 = "i",
158 LimitAS: u64 = "t",
159 LimitASSoft: u64 = "t",
160 LimitCORE: u64 = "t",
161 LimitCORESoft: u64 = "t",
162 LimitCPU: u64 = "t",
163 LimitCPUSoft: u64 = "t",
164 LimitDATA: u64 = "t",
165 LimitDATASoft: u64 = "t",
166 LimitFSIZE: u64 = "t",
167 LimitFSIZESoft: u64 = "t",
168 LimitLOCKS: u64 = "t",
169 LimitLOCKSSoft: u64 = "t",
170 LimitMEMLOCK: u64 = "t",
171 LimitMEMLOCKSoft: u64 = "t",
172 LimitMSGQUEUE: u64 = "t",
173 LimitMSGQUEUESoft: u64 = "t",
174 LimitNICE: u64 = "t",
175 LimitNICESoft: u64 = "t",
176 LimitNOFILE: u64 = "t",
177 LimitNOFILESoft: u64 = "t",
178 LimitNPROC: u64 = "t",
179 LimitNPROCSoft: u64 = "t",
180 LimitRSS: u64 = "t",
181 LimitRSSSoft: u64 = "t",
182 LimitRTPRIO: u64 = "t",
183 LimitRTPRIOSoft: u64 = "t",
184 LimitRTTIME: u64 = "t",
185 LimitRTTIMESoft: u64 = "t",
186 LimitSIGPENDING: u64 = "t",
187 LimitSIGPENDINGSoft: u64 = "t",
188 LimitSTACK: u64 = "t",
189 LimitSTACKSoft: u64 = "t",
190 LoadCredential: Vec<LoadCredential> = "a(ss)",
191 LoadCredentialEncrypted: Vec<LoadCredential> = "a(ss)",
192 LockPersonality: bool = "b",
193 LogExtraFields: Vec<Vec<u8>> = "aay",
194 LogFilterPatterns: Vec<LogFilterPattern> = "a(bs)",
195 LogLevelMax: i32 = "i",
196 LogNamespace: String = "s",
197 LogRateLimitBurst: u32 = "u",
198 LogRateLimitIntervalUSec: Usec = "t",
199 LogsDirectory: Vec<String> = "as",
200 LogsDirectoryAccounting: bool = "b",
201 LogsDirectoryMode: u32 = "u",
202 LogsDirectoryQuota: DirectoryQuota = "(tus)",
203 LogsDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
204 ManagedOOMMemoryPressure: ManagedOomMode = "s",
205 ManagedOOMMemoryPressureDurationUSec: Usec = "t",
206 ManagedOOMMemoryPressureLimit: u32 = "u",
207 ManagedOOMPreference: ManagedOomPreference = "s",
208 ManagedOOMSwap: ManagedOomMode = "s",
209 Markers: Vec<String> = "as",
210 MemoryAccounting: bool = "b",
211 MemoryDenyWriteExecute: bool = "b",
212 MemoryHigh: u64 = "t",
213 MemoryHighScale: u32 = "u",
214 MemoryKSM: bool = "b",
215 MemoryLow: u64 = "t",
216 MemoryLowScale: u32 = "u",
217 MemoryMax: u64 = "t",
218 MemoryMaxScale: u32 = "u",
219 MemoryMin: u64 = "t",
220 MemoryMinScale: u32 = "u",
221 MemoryPressureThresholdUSec: Usec = "t",
222 MemoryPressureWatch: CgroupPressureWatch = "s",
223 MemorySwapMax: u64 = "t",
224 MemorySwapMaxScale: u32 = "u",
225 MemoryTHP: ExecMemoryThp = "s",
226 MemoryZSwapMax: u64 = "t",
227 MemoryZSwapMaxScale: u32 = "u",
228 MemoryZSwapWriteback: bool = "b",
229 MountAPIVFS: bool = "b",
230 MountFlags: u64 = "t",
231 MountImagePolicy: String = "s",
232 MountImages: Vec<MountImage> = "a(ssba(ss))",
233 NFTSet: Vec<NftSet> = "a(iiss)",
234 NUMAMask: Vec<u8> = "ay",
235 NUMAPolicy: i32 = "i",
236 NetworkNamespacePath: String = "s",
237 Nice: i32 = "i",
238 NoExecPaths: Vec<String> = "as",
239 NoNewPrivileges: bool = "b",
240 NonBlocking: bool = "b",
241 NotifyAccess: NotifyAccess = "s",
242 OOMPolicy: OomPolicy = "s",
243 OOMRules: Vec<String> = "as",
244 OOMScoreAdjust: i32 = "i",
245 OnFailure: Vec<String> = "as",
246 OnFailureJobMode: JobMode = "s",
247 OnSuccess: Vec<String> = "as",
248 OnSuccessJobMode: JobMode = "s",
249 OpenFile: Vec<OpenFile> = "a(sst)",
250 PAMName: String = "s",
251 PIDFile: String = "s",
252 PartOf: Vec<String> = "as",
253 PassEnvironment: Vec<String> = "as",
254 PermissionsStartOnly: bool = "b",
255 Personality: String = "s",
256 PrivateBPF: PrivateBpf = "s",
257 PrivateDevices: bool = "b",
258 PrivateIPC: bool = "b",
259 PrivateMounts: bool = "b",
260 PrivateNetwork: bool = "b",
261 PrivatePIDs: PrivatePids = "s",
262 PrivateTmp: bool = "b",
263 PrivateTmpEx: PrivateTmp = "s",
264 PrivateUsers: bool = "b",
265 PrivateUsersEx: PrivateUsers = "s",
266 ProcSubset: ProcSubset = "s",
267 PropagatesReloadTo: Vec<String> = "as",
268 PropagatesStopTo: Vec<String> = "as",
269 ProtectClock: bool = "b",
270 ProtectControlGroups: bool = "b",
271 ProtectControlGroupsEx: ProtectControlGroups = "s",
272 ProtectHome: ProtectHome = "s",
273 ProtectHostname: bool = "b",
274 ProtectHostnameEx: ProtectHostnameEx = "(ss)",
275 ProtectKernelLogs: bool = "b",
276 ProtectKernelModules: bool = "b",
277 ProtectKernelTunables: bool = "b",
278 ProtectProc: ProtectProc = "s",
279 ProtectSystem: ProtectSystem = "s",
280 ReadOnlyDirectories: Vec<String> = "as",
281 ReadOnlyPaths: Vec<String> = "as",
282 ReadWriteDirectories: Vec<String> = "as",
283 ReadWritePaths: Vec<String> = "as",
284 RebootArgument: String = "s",
285 RefreshOnReload: Vec<RefreshOnReload> = "a(bs)",
286 RefuseManualStart: bool = "b",
287 RefuseManualStop: bool = "b",
288 ReloadPropagatedFrom: Vec<String> = "as",
289 ReloadSignal: i32 = "i",
290 RemainAfterExit: bool = "b",
291 RemoveIPC: bool = "b",
292 Requires: Vec<String> = "as",
293 RequiresMountsFor: Vec<String> = "as",
294 Requisite: Vec<String> = "as",
295 RequisiteOverridable: Vec<String> = "as",
296 Restart: ServiceRestart = "s",
297 RestartForceExitStatus: ExitStatusSet = "(aiai)",
298 RestartKillSignal: i32 = "i",
299 RestartMaxDelayUSec: Usec = "t",
300 RestartMode: ServiceRestartMode = "s",
301 RestartPreventExitStatus: ExitStatusSet = "(aiai)",
302 RestartSteps: u32 = "u",
303 RestartUSec: Usec = "t",
304 RestrictAddressFamilies: FilterList = "(bas)",
305 RestrictFileSystems: FilterList = "(bas)",
306 RestrictNamespaces: u64 = "t",
307 RestrictNetworkInterfaces: FilterList = "(bas)",
308 RestrictRealtime: bool = "b",
309 RestrictSUIDSGID: bool = "b",
310 RootDirectory: String = "s",
311 RootDirectoryFileDescriptor: Fd<'static> = "h",
312 RootDirectoryStartOnly: bool = "b",
313 RootEphemeral: bool = "b",
314 RootHash: Vec<u8> = "ay",
315 RootHashPath: String = "s",
316 RootHashSignature: Vec<u8> = "ay",
317 RootHashSignaturePath: String = "s",
318 RootImage: String = "s",
319 RootImageOptions: Vec<MountOption> = "a(ss)",
320 RootImagePolicy: String = "s",
321 RootMStack: String = "s",
322 RootVerity: String = "s",
323 RuntimeDirectory: Vec<String> = "as",
324 RuntimeDirectoryMode: u32 = "u",
325 RuntimeDirectoryPreserve: ExecPreserveMode = "s",
326 RuntimeDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
327 RuntimeMaxUSec: Usec = "t",
328 RuntimeRandomizedExtraUSec: Usec = "t",
329 SELinuxContext: String = "s",
330 SecureBits: i32 = "i",
331 SendSIGHUP: bool = "b",
332 SendSIGKILL: bool = "b",
333 SetCredential: Vec<SetCredential> = "a(say)",
334 SetCredentialEncrypted: Vec<SetCredential> = "a(say)",
335 SetLoginEnvironment: bool = "b",
336 Slice: String = "s",
337 SmackProcessLabel: SecurityLabel = "(bs)",
338 SocketBindAllow: Vec<SocketBind> = "a(iiqq)",
339 SocketBindDeny: Vec<SocketBind> = "a(iiqq)",
340 SourcePath: String = "s",
341 StandardError: ExecOutput = "s",
342 StandardErrorFile: String = "s",
343 StandardErrorFileDescriptor: Fd<'static> = "h",
344 StandardErrorFileDescriptorName: String = "s",
345 StandardErrorFileToAppend: String = "s",
346 StandardErrorFileToTruncate: String = "s",
347 StandardInput: ExecInput = "s",
348 StandardInputData: Vec<u8> = "ay",
349 StandardInputFile: String = "s",
350 StandardInputFileDescriptor: Fd<'static> = "h",
351 StandardInputFileDescriptorName: String = "s",
352 StandardOutput: ExecOutput = "s",
353 StandardOutputFile: String = "s",
354 StandardOutputFileDescriptor: Fd<'static> = "h",
355 StandardOutputFileDescriptorName: String = "s",
356 StandardOutputFileToAppend: String = "s",
357 StandardOutputFileToTruncate: String = "s",
358 StartLimitAction: EmergencyAction = "s",
359 StartLimitBurst: u32 = "u",
360 StartLimitIntervalUSec: Usec = "t",
361 StartupAllowedCPUs: Vec<u8> = "ay",
362 StartupAllowedMemoryNodes: Vec<u8> = "ay",
363 StartupCPUWeight: u64 = "t",
364 StartupIOWeight: u64 = "t",
365 StartupMemoryHigh: u64 = "t",
366 StartupMemoryLow: u64 = "t",
367 StartupMemoryMax: u64 = "t",
368 StartupMemorySwapMax: u64 = "t",
369 StartupMemoryZSwapMax: u64 = "t",
370 StateDirectory: Vec<String> = "as",
371 StateDirectoryAccounting: bool = "b",
372 StateDirectoryMode: u32 = "u",
373 StateDirectoryQuota: DirectoryQuota = "(tus)",
374 StateDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
375 StopPropagatedFrom: Vec<String> = "as",
376 StopWhenUnneeded: bool = "b",
377 SuccessAction: EmergencyAction = "s",
378 SuccessActionExitStatus: i32 = "i",
379 SuccessExitStatus: ExitStatusSet = "(aiai)",
380 SupplementaryGroups: Vec<String> = "as",
381 SurviveFinalKillSignal: bool = "b",
382 SyslogFacility: i32 = "i",
383 SyslogIdentifier: String = "s",
384 SyslogLevel: i32 = "i",
385 SyslogLevelPrefix: bool = "b",
386 SystemCallArchitectures: Vec<String> = "as",
387 SystemCallErrorNumber: i32 = "i",
388 SystemCallFilter: FilterList = "(bas)",
389 SystemCallLog: FilterList = "(bas)",
390 TTYColumns: u32 = "u",
391 TTYPath: String = "s",
392 TTYReset: bool = "b",
393 TTYRows: u32 = "u",
394 TTYVHangup: bool = "b",
395 TTYVTDisallocate: bool = "b",
396 TasksAccounting: bool = "b",
397 TasksMax: u64 = "t",
398 TasksMaxScale: u32 = "u",
399 TemporaryFileSystem: Vec<TmpFs> = "a(ss)",
400 TimeoutAbortUSec: Usec = "t",
401 TimeoutStartFailureMode: ServiceTimeoutFailureMode = "s",
402 TimeoutStartUSec: Usec = "t",
403 TimeoutStopFailureMode: ServiceTimeoutFailureMode = "s",
404 TimeoutStopUSec: Usec = "t",
405 TimerSlackNSec: u64 = "t",
406 Type: ServiceType = "s",
407 UMask: u32 = "u",
408 USBFunctionDescriptors: String = "s",
409 USBFunctionStrings: String = "s",
410 UnsetEnvironment: Vec<String> = "as",
411 Upholds: Vec<String> = "as",
412 User: String = "s",
413 UserNamespacePath: String = "s",
414 UtmpIdentifier: String = "s",
415 UtmpMode: ExecUtmpMode = "s",
416 Wants: Vec<String> = "as",
417 WantsMountsFor: Vec<String> = "as",
418 WatchdogSignal: i32 = "i",
419 WatchdogUSec: Usec = "t",
420 WorkingDirectory: String = "s",
421}