use crate::props::*;
str_enum!(CgroupDevicePolicy { Auto => "auto", Closed => "closed", Strict => "strict" });
str_enum!(CgroupPressureWatch { No => "no", Yes => "yes", Auto => "auto", Skip => "skip" });
str_enum!(CollectMode { Inactive => "inactive", InactiveOrFailed => "inactive-or-failed" });
str_enum!(CpusetPartition { Member => "member", Root => "root", Isolated => "isolated" });
str_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" });
str_enum!(ExecCommandFlag { IgnoreFailure => "ignore-failure", Privileged => "privileged", NoSetuid => "no-setuid", NoEnvExpand => "no-env-expand", ViaShell => "via-shell" });
str_enum!(ExecKeyringMode { Inherit => "inherit", Private => "private", Shared => "shared" });
str_enum!(ExecMemoryThp { Inherit => "inherit", Disable => "disable", Madvise => "madvise", System => "system" });
str_enum!(ExecPreserveMode { No => "no", Yes => "yes", Restart => "restart", OnSuccess => "on-success" });
str_enum!(ExecUtmpMode { Init => "init", Login => "login", User => "user" });
str_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" });
str_enum!(KillMode { ControlGroup => "control-group", Process => "process", Mixed => "mixed", None => "none" });
str_enum!(ManagedOomMode { Auto => "auto", Kill => "kill" });
str_enum!(ManagedOomPreference { None => "none", Avoid => "avoid", Omit => "omit" });
str_enum!(NotifyAccess { None => "none", Main => "main", Exec => "exec", All => "all" });
str_enum!(OomPolicy { Continue => "continue", Stop => "stop", Kill => "kill" });
str_enum!(PrivateBpf { No => "no", Yes => "yes" });
str_enum!(PrivatePids { No => "no", Yes => "yes" });
str_enum!(PrivateTmp { No => "no", Connected => "connected", Disconnected => "disconnected" });
str_enum!(PrivateUsers { No => "no", Self_ => "self", Identity => "identity", Full => "full", Managed => "managed" });
str_enum!(ProcSubset { All => "all", Pid => "pid" });
str_enum!(ProtectControlGroups { No => "no", Yes => "yes", Private => "private", Strict => "strict" });
str_enum!(ProtectHome { No => "no", Yes => "yes", ReadOnly => "read-only", Tmpfs => "tmpfs" });
str_enum!(ProtectHostname { No => "no", Yes => "yes", Private => "private" });
str_enum!(ProtectProc { Default => "default", Noaccess => "noaccess", Invisible => "invisible", Ptraceable => "ptraceable" });
str_enum!(ProtectSystem { No => "no", Yes => "yes", Full => "full", Strict => "strict" });
str_enum!(ServiceExitType { Main => "main", Cgroup => "cgroup" });
str_enum!(ServiceRestart { No => "no", OnSuccess => "on-success", OnFailure => "on-failure", OnAbnormal => "on-abnormal", OnWatchdog => "on-watchdog", OnAbort => "on-abort", Always => "always" });
str_enum!(ServiceRestartMode { Normal => "normal", Direct => "direct", Debug => "debug" });
str_enum!(ServiceTimeoutFailureMode { Terminate => "terminate", Abort => "abort", Kill => "kill" });
str_enum!(ServiceType { Simple => "simple", Forking => "forking", Oneshot => "oneshot", Dbus => "dbus", Notify => "notify", NotifyReload => "notify-reload", Idle => "idle", Exec => "exec" });
unit_properties! {
AddRef: bool = "b",
After: Vec<String> = "as",
AllowIsolate: bool = "b",
AllowedCPUs: Vec<u8> = "ay",
AllowedMemoryNodes: Vec<u8> = "ay",
AmbientCapabilities: u64 = "t",
AppArmorProfile: SecurityLabel = "(bs)",
Asserts: Vec<Condition> = "a(sbbs)",
BPFDelegateAttachments: String = "s",
BPFDelegateCommands: String = "s",
BPFDelegateMaps: String = "s",
BPFDelegatePrograms: String = "s",
BPFProgram: Vec<BpfProgram> = "a(ss)",
Before: Vec<String> = "as",
BindLogSockets: bool = "b",
BindNetworkInterface: String = "s",
BindPaths: Vec<BindPath> = "a(ssbt)",
BindReadOnlyPaths: Vec<BindPath> = "a(ssbt)",
BindsTo: Vec<String> = "as",
BusName: String = "s",
CPUAffinity: Vec<u8> = "ay",
CPUAffinityFromNUMA: bool = "b",
CPUPressureThresholdUSec: Usec = "t",
CPUPressureWatch: CgroupPressureWatch = "s",
CPUQuotaPerSecUSec: Usec = "t",
CPUQuotaPeriodUSec: Usec = "t",
CPUSchedulingPolicy: i32 = "i",
CPUSchedulingPriority: i32 = "i",
CPUSchedulingResetOnFork: bool = "b",
CPUSetPartition: CpusetPartition = "s",
CPUWeight: u64 = "t",
CacheDirectory: Vec<String> = "as",
CacheDirectoryAccounting: bool = "b",
CacheDirectoryMode: u32 = "u",
CacheDirectoryQuota: DirectoryQuota = "(tus)",
CacheDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
CapabilityBoundingSet: u64 = "t",
CollectMode: CollectMode = "s",
Conditions: Vec<Condition> = "a(sbbs)",
ConfigurationDirectory: Vec<String> = "as",
ConfigurationDirectoryMode: u32 = "u",
Conflicts: Vec<String> = "as",
CoredumpFilter: u64 = "t",
CoredumpReceive: bool = "b",
DefaultDependencies: bool = "b",
Delegate: bool = "b",
DelegateControllers: Vec<String> = "as",
DelegateNamespaces: u64 = "t",
DelegateSubgroup: String = "s",
Description: String = "s",
DeviceAllow: Vec<DeviceAllow> = "a(ss)",
DevicePolicy: CgroupDevicePolicy = "s",
DisableControllers: Vec<String> = "as",
Documentation: Vec<String> = "as",
DynamicUser: bool = "b",
Environment: Vec<String> = "as",
EnvironmentFiles: Vec<EnvironmentFile> = "a(sb)",
ExecCondition: Vec<ExecCommand> = "a(sasb)",
ExecConditionEx: Vec<ExecCommandEx> = "a(sasas)",
ExecPaths: Vec<String> = "as",
ExecReload: Vec<ExecCommand> = "a(sasb)",
ExecReloadEx: Vec<ExecCommandEx> = "a(sasas)",
ExecReloadPost: Vec<ExecCommand> = "a(sasb)",
ExecReloadPostEx: Vec<ExecCommandEx> = "a(sasas)",
ExecSearchPath: Vec<String> = "as",
ExecStart: Vec<ExecCommand> = "a(sasb)",
ExecStartEx: Vec<ExecCommandEx> = "a(sasas)",
ExecStartPost: Vec<ExecCommand> = "a(sasb)",
ExecStartPostEx: Vec<ExecCommandEx> = "a(sasas)",
ExecStartPre: Vec<ExecCommand> = "a(sasb)",
ExecStartPreEx: Vec<ExecCommandEx> = "a(sasas)",
ExecStop: Vec<ExecCommand> = "a(sasb)",
ExecStopEx: Vec<ExecCommandEx> = "a(sasas)",
ExecStopPost: Vec<ExecCommand> = "a(sasb)",
ExecStopPostEx: Vec<ExecCommandEx> = "a(sasas)",
ExitType: ServiceExitType = "s",
ExtensionDirectories: Vec<String> = "as",
ExtensionImagePolicy: String = "s",
ExtensionImages: Vec<ExtensionImage> = "a(sba(ss))",
FailureAction: EmergencyAction = "s",
FailureActionExitStatus: i32 = "i",
FileDescriptorStoreMax: u32 = "u",
FileDescriptorStorePreserve: ExecPreserveMode = "s",
FinalKillSignal: i32 = "i",
Group: String = "s",
GuessMainPID: bool = "b",
IOAccounting: bool = "b",
IODeviceLatencyTargetUSec: Vec<DeviceValue> = "a(st)",
IODeviceWeight: Vec<DeviceValue> = "a(st)",
IOPressureThresholdUSec: Usec = "t",
IOPressureWatch: CgroupPressureWatch = "s",
IOReadBandwidthMax: Vec<DeviceValue> = "a(st)",
IOReadIOPSMax: Vec<DeviceValue> = "a(st)",
IOSchedulingClass: i32 = "i",
IOSchedulingPriority: i32 = "i",
IOWeight: u64 = "t",
IOWriteBandwidthMax: Vec<DeviceValue> = "a(st)",
IOWriteIOPSMax: Vec<DeviceValue> = "a(st)",
IPAccounting: bool = "b",
IPAddressAllow: Vec<IpPrefix> = "a(iayu)",
IPAddressDeny: Vec<IpPrefix> = "a(iayu)",
IPCNamespacePath: String = "s",
IPEgressFilterPath: Vec<String> = "as",
IPIngressFilterPath: Vec<String> = "as",
IgnoreOnIsolate: bool = "b",
IgnoreSIGPIPE: bool = "b",
ImportCredential: Vec<String> = "as",
ImportCredentialEx: Vec<ImportCredential> = "a(ss)",
InaccessibleDirectories: Vec<String> = "as",
InaccessiblePaths: Vec<String> = "as",
JobRunningTimeoutUSec: Usec = "t",
JobTimeoutAction: EmergencyAction = "s",
JobTimeoutRebootArgument: String = "s",
JobTimeoutUSec: Usec = "t",
JoinsNamespaceOf: Vec<String> = "as",
KeyringMode: ExecKeyringMode = "s",
KillMode: KillMode = "s",
KillSignal: i32 = "i",
LimitAS: u64 = "t",
LimitASSoft: u64 = "t",
LimitCORE: u64 = "t",
LimitCORESoft: u64 = "t",
LimitCPU: u64 = "t",
LimitCPUSoft: u64 = "t",
LimitDATA: u64 = "t",
LimitDATASoft: u64 = "t",
LimitFSIZE: u64 = "t",
LimitFSIZESoft: u64 = "t",
LimitLOCKS: u64 = "t",
LimitLOCKSSoft: u64 = "t",
LimitMEMLOCK: u64 = "t",
LimitMEMLOCKSoft: u64 = "t",
LimitMSGQUEUE: u64 = "t",
LimitMSGQUEUESoft: u64 = "t",
LimitNICE: u64 = "t",
LimitNICESoft: u64 = "t",
LimitNOFILE: u64 = "t",
LimitNOFILESoft: u64 = "t",
LimitNPROC: u64 = "t",
LimitNPROCSoft: u64 = "t",
LimitRSS: u64 = "t",
LimitRSSSoft: u64 = "t",
LimitRTPRIO: u64 = "t",
LimitRTPRIOSoft: u64 = "t",
LimitRTTIME: u64 = "t",
LimitRTTIMESoft: u64 = "t",
LimitSIGPENDING: u64 = "t",
LimitSIGPENDINGSoft: u64 = "t",
LimitSTACK: u64 = "t",
LimitSTACKSoft: u64 = "t",
LoadCredential: Vec<LoadCredential> = "a(ss)",
LoadCredentialEncrypted: Vec<LoadCredential> = "a(ss)",
LockPersonality: bool = "b",
LogExtraFields: Vec<Vec<u8>> = "aay",
LogFilterPatterns: Vec<LogFilterPattern> = "a(bs)",
LogLevelMax: i32 = "i",
LogNamespace: String = "s",
LogRateLimitBurst: u32 = "u",
LogRateLimitIntervalUSec: Usec = "t",
LogsDirectory: Vec<String> = "as",
LogsDirectoryAccounting: bool = "b",
LogsDirectoryMode: u32 = "u",
LogsDirectoryQuota: DirectoryQuota = "(tus)",
LogsDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
ManagedOOMMemoryPressure: ManagedOomMode = "s",
ManagedOOMMemoryPressureDurationUSec: Usec = "t",
ManagedOOMMemoryPressureLimit: u32 = "u",
ManagedOOMPreference: ManagedOomPreference = "s",
ManagedOOMSwap: ManagedOomMode = "s",
Markers: Vec<String> = "as",
MemoryAccounting: bool = "b",
MemoryDenyWriteExecute: bool = "b",
MemoryHigh: u64 = "t",
MemoryHighScale: u32 = "u",
MemoryKSM: bool = "b",
MemoryLow: u64 = "t",
MemoryLowScale: u32 = "u",
MemoryMax: u64 = "t",
MemoryMaxScale: u32 = "u",
MemoryMin: u64 = "t",
MemoryMinScale: u32 = "u",
MemoryPressureThresholdUSec: Usec = "t",
MemoryPressureWatch: CgroupPressureWatch = "s",
MemorySwapMax: u64 = "t",
MemorySwapMaxScale: u32 = "u",
MemoryTHP: ExecMemoryThp = "s",
MemoryZSwapMax: u64 = "t",
MemoryZSwapMaxScale: u32 = "u",
MemoryZSwapWriteback: bool = "b",
MountAPIVFS: bool = "b",
MountFlags: u64 = "t",
MountImagePolicy: String = "s",
MountImages: Vec<MountImage> = "a(ssba(ss))",
NFTSet: Vec<NftSet> = "a(iiss)",
NUMAMask: Vec<u8> = "ay",
NUMAPolicy: i32 = "i",
NetworkNamespacePath: String = "s",
Nice: i32 = "i",
NoExecPaths: Vec<String> = "as",
NoNewPrivileges: bool = "b",
NonBlocking: bool = "b",
NotifyAccess: NotifyAccess = "s",
OOMPolicy: OomPolicy = "s",
OOMRules: Vec<String> = "as",
OOMScoreAdjust: i32 = "i",
OnFailure: Vec<String> = "as",
OnFailureJobMode: JobMode = "s",
OnSuccess: Vec<String> = "as",
OnSuccessJobMode: JobMode = "s",
OpenFile: Vec<OpenFile> = "a(sst)",
PAMName: String = "s",
PIDFile: String = "s",
PartOf: Vec<String> = "as",
PassEnvironment: Vec<String> = "as",
PermissionsStartOnly: bool = "b",
Personality: String = "s",
PrivateBPF: PrivateBpf = "s",
PrivateDevices: bool = "b",
PrivateIPC: bool = "b",
PrivateMounts: bool = "b",
PrivateNetwork: bool = "b",
PrivatePIDs: PrivatePids = "s",
PrivateTmp: bool = "b",
PrivateTmpEx: PrivateTmp = "s",
PrivateUsers: bool = "b",
PrivateUsersEx: PrivateUsers = "s",
ProcSubset: ProcSubset = "s",
PropagatesReloadTo: Vec<String> = "as",
PropagatesStopTo: Vec<String> = "as",
ProtectClock: bool = "b",
ProtectControlGroups: bool = "b",
ProtectControlGroupsEx: ProtectControlGroups = "s",
ProtectHome: ProtectHome = "s",
ProtectHostname: bool = "b",
ProtectHostnameEx: ProtectHostnameEx = "(ss)",
ProtectKernelLogs: bool = "b",
ProtectKernelModules: bool = "b",
ProtectKernelTunables: bool = "b",
ProtectProc: ProtectProc = "s",
ProtectSystem: ProtectSystem = "s",
ReadOnlyDirectories: Vec<String> = "as",
ReadOnlyPaths: Vec<String> = "as",
ReadWriteDirectories: Vec<String> = "as",
ReadWritePaths: Vec<String> = "as",
RebootArgument: String = "s",
RefreshOnReload: Vec<RefreshOnReload> = "a(bs)",
RefuseManualStart: bool = "b",
RefuseManualStop: bool = "b",
ReloadPropagatedFrom: Vec<String> = "as",
ReloadSignal: i32 = "i",
RemainAfterExit: bool = "b",
RemoveIPC: bool = "b",
Requires: Vec<String> = "as",
RequiresMountsFor: Vec<String> = "as",
Requisite: Vec<String> = "as",
RequisiteOverridable: Vec<String> = "as",
Restart: ServiceRestart = "s",
RestartForceExitStatus: ExitStatusSet = "(aiai)",
RestartKillSignal: i32 = "i",
RestartMaxDelayUSec: Usec = "t",
RestartMode: ServiceRestartMode = "s",
RestartPreventExitStatus: ExitStatusSet = "(aiai)",
RestartSteps: u32 = "u",
RestartUSec: Usec = "t",
RestrictAddressFamilies: FilterList = "(bas)",
RestrictFileSystems: FilterList = "(bas)",
RestrictNamespaces: u64 = "t",
RestrictNetworkInterfaces: FilterList = "(bas)",
RestrictRealtime: bool = "b",
RestrictSUIDSGID: bool = "b",
RootDirectory: String = "s",
RootDirectoryStartOnly: bool = "b",
RootEphemeral: bool = "b",
RootHash: Vec<u8> = "ay",
RootHashPath: String = "s",
RootHashSignature: Vec<u8> = "ay",
RootHashSignaturePath: String = "s",
RootImage: String = "s",
RootImageOptions: Vec<MountOption> = "a(ss)",
RootImagePolicy: String = "s",
RootMStack: String = "s",
RootVerity: String = "s",
RuntimeDirectory: Vec<String> = "as",
RuntimeDirectoryMode: u32 = "u",
RuntimeDirectoryPreserve: ExecPreserveMode = "s",
RuntimeDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
RuntimeMaxUSec: Usec = "t",
RuntimeRandomizedExtraUSec: Usec = "t",
SELinuxContext: String = "s",
SecureBits: i32 = "i",
SendSIGHUP: bool = "b",
SendSIGKILL: bool = "b",
SetCredential: Vec<SetCredential> = "a(say)",
SetCredentialEncrypted: Vec<SetCredential> = "a(say)",
SetLoginEnvironment: bool = "b",
Slice: String = "s",
SmackProcessLabel: SecurityLabel = "(bs)",
SocketBindAllow: Vec<SocketBind> = "a(iiqq)",
SocketBindDeny: Vec<SocketBind> = "a(iiqq)",
SourcePath: String = "s",
StandardErrorFile: String = "s",
StandardErrorFileDescriptorName: String = "s",
StandardErrorFileToAppend: String = "s",
StandardErrorFileToTruncate: String = "s",
StandardInputData: Vec<u8> = "ay",
StandardInputFile: String = "s",
StandardInputFileDescriptorName: String = "s",
StandardOutputFile: String = "s",
StandardOutputFileDescriptorName: String = "s",
StandardOutputFileToAppend: String = "s",
StandardOutputFileToTruncate: String = "s",
StartLimitAction: EmergencyAction = "s",
StartLimitBurst: u32 = "u",
StartLimitIntervalUSec: Usec = "t",
StartupAllowedCPUs: Vec<u8> = "ay",
StartupAllowedMemoryNodes: Vec<u8> = "ay",
StartupCPUWeight: u64 = "t",
StartupIOWeight: u64 = "t",
StartupMemoryHigh: u64 = "t",
StartupMemoryLow: u64 = "t",
StartupMemoryMax: u64 = "t",
StartupMemorySwapMax: u64 = "t",
StartupMemoryZSwapMax: u64 = "t",
StateDirectory: Vec<String> = "as",
StateDirectoryAccounting: bool = "b",
StateDirectoryMode: u32 = "u",
StateDirectoryQuota: DirectoryQuota = "(tus)",
StateDirectorySymlink: Vec<DirectorySymlink> = "a(sst)",
StopPropagatedFrom: Vec<String> = "as",
StopWhenUnneeded: bool = "b",
SuccessAction: EmergencyAction = "s",
SuccessActionExitStatus: i32 = "i",
SuccessExitStatus: ExitStatusSet = "(aiai)",
SupplementaryGroups: Vec<String> = "as",
SurviveFinalKillSignal: bool = "b",
SyslogFacility: i32 = "i",
SyslogIdentifier: String = "s",
SyslogLevel: i32 = "i",
SyslogLevelPrefix: bool = "b",
SystemCallArchitectures: Vec<String> = "as",
SystemCallErrorNumber: i32 = "i",
SystemCallFilter: FilterList = "(bas)",
SystemCallLog: FilterList = "(bas)",
TTYColumns: u32 = "u",
TTYPath: String = "s",
TTYReset: bool = "b",
TTYRows: u32 = "u",
TTYVHangup: bool = "b",
TTYVTDisallocate: bool = "b",
TasksAccounting: bool = "b",
TasksMax: u64 = "t",
TasksMaxScale: u32 = "u",
TemporaryFileSystem: Vec<TmpFs> = "a(ss)",
TimeoutAbortUSec: Usec = "t",
TimeoutStartFailureMode: ServiceTimeoutFailureMode = "s",
TimeoutStartUSec: Usec = "t",
TimeoutStopFailureMode: ServiceTimeoutFailureMode = "s",
TimeoutStopUSec: Usec = "t",
TimerSlackNSec: u64 = "t",
Type: ServiceType = "s",
UMask: u32 = "u",
USBFunctionDescriptors: String = "s",
USBFunctionStrings: String = "s",
UnsetEnvironment: Vec<String> = "as",
Upholds: Vec<String> = "as",
User: String = "s",
UserNamespacePath: String = "s",
UtmpIdentifier: String = "s",
UtmpMode: ExecUtmpMode = "s",
Wants: Vec<String> = "as",
WantsMountsFor: Vec<String> = "as",
WatchdogSignal: i32 = "i",
WatchdogUSec: Usec = "t",
WorkingDirectory: String = "s",
}