// Copyright © 2017 Asteris, LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by generate-dbus-wrappers
// DO NOT EDIT!

package unit

// Properties wraps the dbus api for system with properties from this unit type
type Properties struct {
	ActiveEnterTimestamp            uint64          `export:"ActiveEnterTimestamp"`
	ActiveEnterTimestampMonotonic   uint64          `export:"ActiveEnterTimestampMonotonic"`
	ActiveExitTimestamp             uint64          `export:"ActiveExitTimestamp"`
	ActiveExitTimestampMonotonic    uint64          `export:"ActiveExitTimestampMonotonic"`
	ActiveState                     string          `export:"ActiveState"`
	After                           []string        `export:"After"`
	AllowIsolate                    bool            `export:"AllowIsolate"`
	AssertResult                    bool            `export:"AssertResult"`
	AssertTimestamp                 uint64          `export:"AssertTimestamp"`
	AssertTimestampMonotonic        uint64          `export:"AssertTimestampMonotonic"`
	Asserts                         [][]interface{} `export:"Asserts"`
	Before                          []string        `export:"Before"`
	BindsTo                         []string        `export:"BindsTo"`
	BoundBy                         []string        `export:"BoundBy"`
	CanIsolate                      bool            `export:"CanIsolate"`
	CanReload                       bool            `export:"CanReload"`
	CanStart                        bool            `export:"CanStart"`
	CanStop                         bool            `export:"CanStop"`
	ConditionResult                 bool            `export:"ConditionResult"`
	ConditionTimestamp              uint64          `export:"ConditionTimestamp"`
	ConditionTimestampMonotonic     uint64          `export:"ConditionTimestampMonotonic"`
	Conditions                      [][]interface{} `export:"Conditions"`
	ConflictedBy                    []string        `export:"ConflictedBy"`
	Conflicts                       []string        `export:"Conflicts"`
	ConsistsOf                      []string        `export:"ConsistsOf"`
	DefaultDependencies             bool            `export:"DefaultDependencies"`
	Description                     string          `export:"Description"`
	Documentation                   []string        `export:"Documentation"`
	DropInPaths                     []string        `export:"DropInPaths"`
	Following                       string          `export:"Following"`
	FragmentPath                    string          `export:"FragmentPath"`
	Id                              string          `export:"Id"`
	IgnoreOnIsolate                 bool            `export:"IgnoreOnIsolate"`
	InactiveEnterTimestamp          uint64          `export:"InactiveEnterTimestamp"`
	InactiveEnterTimestampMonotonic uint64          `export:"InactiveEnterTimestampMonotonic"`
	InactiveExitTimestamp           uint64          `export:"InactiveExitTimestamp"`
	InactiveExitTimestampMonotonic  uint64          `export:"InactiveExitTimestampMonotonic"`
	Job                             []interface{}   `export:"Job"`
	JobTimeoutAction                string          `export:"JobTimeoutAction"`
	JobTimeoutRebootArgument        string          `export:"JobTimeoutRebootArgument"`
	JobTimeoutUSec                  uint64          `export:"JobTimeoutUSec"`
	JoinsNamespaceOf                []string        `export:"JoinsNamespaceOf"`
	LoadError                       []interface{}   `export:"LoadError"`
	LoadState                       string          `export:"LoadState"`
	Names                           []string        `export:"Names"`
	NeedDaemonReload                bool            `export:"NeedDaemonReload"`
	OnFailure                       []string        `export:"OnFailure"`
	OnFailureJobMode                string          `export:"OnFailureJobMode"`
	PartOf                          []string        `export:"PartOf"`
	PropagatesReloadTo              []string        `export:"PropagatesReloadTo"`
	RebootArgument                  string          `export:"RebootArgument"`
	RefuseManualStart               bool            `export:"RefuseManualStart"`
	RefuseManualStop                bool            `export:"RefuseManualStop"`
	ReloadPropagatedFrom            []string        `export:"ReloadPropagatedFrom"`
	RequiredBy                      []string        `export:"RequiredBy"`
	Requires                        []string        `export:"Requires"`
	RequiresMountsFor               []string        `export:"RequiresMountsFor"`
	Requisite                       []string        `export:"Requisite"`
	RequisiteOf                     []string        `export:"RequisiteOf"`
	SourcePath                      string          `export:"SourcePath"`
	StartLimitAction                string          `export:"StartLimitAction"`
	StartLimitBurst                 uint32          `export:"StartLimitBurst"`
	StartLimitInterval              uint64          `export:"StartLimitInterval"`
	StateChangeTimestamp            uint64          `export:"StateChangeTimestamp"`
	StateChangeTimestampMonotonic   uint64          `export:"StateChangeTimestampMonotonic"`
	StopWhenUnneeded                bool            `export:"StopWhenUnneeded"`
	SubState                        string          `export:"SubState"`
	Transient                       bool            `export:"Transient"`
	TriggeredBy                     []string        `export:"TriggeredBy"`
	Triggers                        []string        `export:"Triggers"`
	UnitFilePreset                  string          `export:"UnitFilePreset"`
	UnitFileState                   string          `export:"UnitFileState"`
	WantedBy                        []string        `export:"WantedBy"`
	Wants                           []string        `export:"Wants"`
}

// newPropertiesFromMap generates a new Properties given a systemd property map
func newPropertiesFromMap(m map[string]interface{}) *Properties {
	s := &Properties{}

	if val, ok := m["ActiveEnterTimestamp"]; ok {
		s.ActiveEnterTimestamp = val.(uint64)
	}

	if val, ok := m["ActiveEnterTimestampMonotonic"]; ok {
		s.ActiveEnterTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["ActiveExitTimestamp"]; ok {
		s.ActiveExitTimestamp = val.(uint64)
	}

	if val, ok := m["ActiveExitTimestampMonotonic"]; ok {
		s.ActiveExitTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["ActiveState"]; ok {
		s.ActiveState = val.(string)
	}

	if val, ok := m["After"]; ok {
		s.After = val.([]string)
	}

	if val, ok := m["AllowIsolate"]; ok {
		s.AllowIsolate = val.(bool)
	}

	if val, ok := m["AssertResult"]; ok {
		s.AssertResult = val.(bool)
	}

	if val, ok := m["AssertTimestamp"]; ok {
		s.AssertTimestamp = val.(uint64)
	}

	if val, ok := m["AssertTimestampMonotonic"]; ok {
		s.AssertTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["Asserts"]; ok {
		s.Asserts = val.([][]interface{})
	}

	if val, ok := m["Before"]; ok {
		s.Before = val.([]string)
	}

	if val, ok := m["BindsTo"]; ok {
		s.BindsTo = val.([]string)
	}

	if val, ok := m["BoundBy"]; ok {
		s.BoundBy = val.([]string)
	}

	if val, ok := m["CanIsolate"]; ok {
		s.CanIsolate = val.(bool)
	}

	if val, ok := m["CanReload"]; ok {
		s.CanReload = val.(bool)
	}

	if val, ok := m["CanStart"]; ok {
		s.CanStart = val.(bool)
	}

	if val, ok := m["CanStop"]; ok {
		s.CanStop = val.(bool)
	}

	if val, ok := m["ConditionResult"]; ok {
		s.ConditionResult = val.(bool)
	}

	if val, ok := m["ConditionTimestamp"]; ok {
		s.ConditionTimestamp = val.(uint64)
	}

	if val, ok := m["ConditionTimestampMonotonic"]; ok {
		s.ConditionTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["Conditions"]; ok {
		s.Conditions = val.([][]interface{})
	}

	if val, ok := m["ConflictedBy"]; ok {
		s.ConflictedBy = val.([]string)
	}

	if val, ok := m["Conflicts"]; ok {
		s.Conflicts = val.([]string)
	}

	if val, ok := m["ConsistsOf"]; ok {
		s.ConsistsOf = val.([]string)
	}

	if val, ok := m["DefaultDependencies"]; ok {
		s.DefaultDependencies = val.(bool)
	}

	if val, ok := m["Description"]; ok {
		s.Description = val.(string)
	}

	if val, ok := m["Documentation"]; ok {
		s.Documentation = val.([]string)
	}

	if val, ok := m["DropInPaths"]; ok {
		s.DropInPaths = val.([]string)
	}

	if val, ok := m["Following"]; ok {
		s.Following = val.(string)
	}

	if val, ok := m["FragmentPath"]; ok {
		s.FragmentPath = val.(string)
	}

	if val, ok := m["Id"]; ok {
		s.Id = val.(string)
	}

	if val, ok := m["IgnoreOnIsolate"]; ok {
		s.IgnoreOnIsolate = val.(bool)
	}

	if val, ok := m["InactiveEnterTimestamp"]; ok {
		s.InactiveEnterTimestamp = val.(uint64)
	}

	if val, ok := m["InactiveEnterTimestampMonotonic"]; ok {
		s.InactiveEnterTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["InactiveExitTimestamp"]; ok {
		s.InactiveExitTimestamp = val.(uint64)
	}

	if val, ok := m["InactiveExitTimestampMonotonic"]; ok {
		s.InactiveExitTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["Job"]; ok {
		s.Job = val.([]interface{})
	}

	if val, ok := m["JobTimeoutAction"]; ok {
		s.JobTimeoutAction = val.(string)
	}

	if val, ok := m["JobTimeoutRebootArgument"]; ok {
		s.JobTimeoutRebootArgument = val.(string)
	}

	if val, ok := m["JobTimeoutUSec"]; ok {
		s.JobTimeoutUSec = val.(uint64)
	}

	if val, ok := m["JoinsNamespaceOf"]; ok {
		s.JoinsNamespaceOf = val.([]string)
	}

	if val, ok := m["LoadError"]; ok {
		s.LoadError = val.([]interface{})
	}

	if val, ok := m["LoadState"]; ok {
		s.LoadState = val.(string)
	}

	if val, ok := m["Names"]; ok {
		s.Names = val.([]string)
	}

	if val, ok := m["NeedDaemonReload"]; ok {
		s.NeedDaemonReload = val.(bool)
	}

	if val, ok := m["OnFailure"]; ok {
		s.OnFailure = val.([]string)
	}

	if val, ok := m["OnFailureJobMode"]; ok {
		s.OnFailureJobMode = val.(string)
	}

	if val, ok := m["PartOf"]; ok {
		s.PartOf = val.([]string)
	}

	if val, ok := m["PropagatesReloadTo"]; ok {
		s.PropagatesReloadTo = val.([]string)
	}

	if val, ok := m["RebootArgument"]; ok {
		s.RebootArgument = val.(string)
	}

	if val, ok := m["RefuseManualStart"]; ok {
		s.RefuseManualStart = val.(bool)
	}

	if val, ok := m["RefuseManualStop"]; ok {
		s.RefuseManualStop = val.(bool)
	}

	if val, ok := m["ReloadPropagatedFrom"]; ok {
		s.ReloadPropagatedFrom = val.([]string)
	}

	if val, ok := m["RequiredBy"]; ok {
		s.RequiredBy = val.([]string)
	}

	if val, ok := m["Requires"]; ok {
		s.Requires = val.([]string)
	}

	if val, ok := m["RequiresMountsFor"]; ok {
		s.RequiresMountsFor = val.([]string)
	}

	if val, ok := m["Requisite"]; ok {
		s.Requisite = val.([]string)
	}

	if val, ok := m["RequisiteOf"]; ok {
		s.RequisiteOf = val.([]string)
	}

	if val, ok := m["SourcePath"]; ok {
		s.SourcePath = val.(string)
	}

	if val, ok := m["StartLimitAction"]; ok {
		s.StartLimitAction = val.(string)
	}

	if val, ok := m["StartLimitBurst"]; ok {
		s.StartLimitBurst = val.(uint32)
	}

	if val, ok := m["StartLimitInterval"]; ok {
		s.StartLimitInterval = val.(uint64)
	}

	if val, ok := m["StateChangeTimestamp"]; ok {
		s.StateChangeTimestamp = val.(uint64)
	}

	if val, ok := m["StateChangeTimestampMonotonic"]; ok {
		s.StateChangeTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["StopWhenUnneeded"]; ok {
		s.StopWhenUnneeded = val.(bool)
	}

	if val, ok := m["SubState"]; ok {
		s.SubState = val.(string)
	}

	if val, ok := m["Transient"]; ok {
		s.Transient = val.(bool)
	}

	if val, ok := m["TriggeredBy"]; ok {
		s.TriggeredBy = val.([]string)
	}

	if val, ok := m["Triggers"]; ok {
		s.Triggers = val.([]string)
	}

	if val, ok := m["UnitFilePreset"]; ok {
		s.UnitFilePreset = val.(string)
	}

	if val, ok := m["UnitFileState"]; ok {
		s.UnitFileState = val.(string)
	}

	if val, ok := m["WantedBy"]; ok {
		s.WantedBy = val.([]string)
	}

	if val, ok := m["Wants"]; ok {
		s.Wants = val.([]string)
	}
	return s
}

// ServiceTypeProperties wraps the dbus api for system with properties from this unit type
type ServiceTypeProperties struct {
	AmbientCapabilities             uint64          `export:"AmbientCapabilities"`
	AppArmorProfile                 []interface{}   `export:"AppArmorProfile"`
	BlockIOAccounting               bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight             [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth            [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight                   uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth           [][]interface{} `export:"BlockIOWriteBandwidth"`
	BusName                         string          `export:"BusName"`
	CPUAccounting                   bool            `export:"CPUAccounting"`
	CPUAffinity                     []uint8         `export:"CPUAffinity"`
	CPUQuotaPerSecUSec              uint64          `export:"CPUQuotaPerSecUSec"`
	CPUSchedulingPolicy             int32           `export:"CPUSchedulingPolicy"`
	CPUSchedulingPriority           int32           `export:"CPUSchedulingPriority"`
	CPUSchedulingResetOnFork        bool            `export:"CPUSchedulingResetOnFork"`
	CPUShares                       uint64          `export:"CPUShares"`
	CPUUsageNSec                    uint64          `export:"CPUUsageNSec"`
	Capabilities                    string          `export:"Capabilities"`
	CapabilityBoundingSet           uint64          `export:"CapabilityBoundingSet"`
	ControlGroup                    string          `export:"ControlGroup"`
	ControlPID                      uint32          `export:"ControlPID"`
	Delegate                        bool            `export:"Delegate"`
	DeviceAllow                     [][]interface{} `export:"DeviceAllow"`
	DevicePolicy                    string          `export:"DevicePolicy"`
	Environment                     []string        `export:"Environment"`
	EnvironmentFiles                [][]interface{} `export:"EnvironmentFiles"`
	ExecMainCode                    int32           `export:"ExecMainCode"`
	ExecMainExitTimestamp           uint64          `export:"ExecMainExitTimestamp"`
	ExecMainExitTimestampMonotonic  uint64          `export:"ExecMainExitTimestampMonotonic"`
	ExecMainPID                     uint32          `export:"ExecMainPID"`
	ExecMainStartTimestamp          uint64          `export:"ExecMainStartTimestamp"`
	ExecMainStartTimestampMonotonic uint64          `export:"ExecMainStartTimestampMonotonic"`
	ExecMainStatus                  int32           `export:"ExecMainStatus"`
	ExecReload                      [][]interface{} `export:"ExecReload"`
	ExecStart                       [][]interface{} `export:"ExecStart"`
	ExecStartPost                   [][]interface{} `export:"ExecStartPost"`
	ExecStartPre                    [][]interface{} `export:"ExecStartPre"`
	ExecStop                        [][]interface{} `export:"ExecStop"`
	ExecStopPost                    [][]interface{} `export:"ExecStopPost"`
	FailureAction                   string          `export:"FailureAction"`
	FileDescriptorStoreMax          uint32          `export:"FileDescriptorStoreMax"`
	Group                           string          `export:"Group"`
	GuessMainPID                    bool            `export:"GuessMainPID"`
	IOScheduling                    int32           `export:"IOScheduling"`
	IgnoreSIGPIPE                   bool            `export:"IgnoreSIGPIPE"`
	InaccessibleDirectories         []string        `export:"InaccessibleDirectories"`
	KillMode                        string          `export:"KillMode"`
	KillSignal                      int32           `export:"KillSignal"`
	LimitAS                         uint64          `export:"LimitAS"`
	LimitASSoft                     uint64          `export:"LimitASSoft"`
	LimitCORE                       uint64          `export:"LimitCORE"`
	LimitCORESoft                   uint64          `export:"LimitCORESoft"`
	LimitCPU                        uint64          `export:"LimitCPU"`
	LimitCPUSoft                    uint64          `export:"LimitCPUSoft"`
	LimitDATA                       uint64          `export:"LimitDATA"`
	LimitDATASoft                   uint64          `export:"LimitDATASoft"`
	LimitFSIZE                      uint64          `export:"LimitFSIZE"`
	LimitFSIZESoft                  uint64          `export:"LimitFSIZESoft"`
	LimitLOCKS                      uint64          `export:"LimitLOCKS"`
	LimitLOCKSSoft                  uint64          `export:"LimitLOCKSSoft"`
	LimitMEMLOCK                    uint64          `export:"LimitMEMLOCK"`
	LimitMEMLOCKSoft                uint64          `export:"LimitMEMLOCKSoft"`
	LimitMSGQUEUE                   uint64          `export:"LimitMSGQUEUE"`
	LimitMSGQUEUESoft               uint64          `export:"LimitMSGQUEUESoft"`
	LimitNICE                       uint64          `export:"LimitNICE"`
	LimitNICESoft                   uint64          `export:"LimitNICESoft"`
	LimitNOFILE                     uint64          `export:"LimitNOFILE"`
	LimitNOFILESoft                 uint64          `export:"LimitNOFILESoft"`
	LimitNPROC                      uint64          `export:"LimitNPROC"`
	LimitNPROCSoft                  uint64          `export:"LimitNPROCSoft"`
	LimitRSS                        uint64          `export:"LimitRSS"`
	LimitRSSSoft                    uint64          `export:"LimitRSSSoft"`
	LimitRTPRIO                     uint64          `export:"LimitRTPRIO"`
	LimitRTPRIOSoft                 uint64          `export:"LimitRTPRIOSoft"`
	LimitRTTIME                     uint64          `export:"LimitRTTIME"`
	LimitRTTIMESoft                 uint64          `export:"LimitRTTIMESoft"`
	LimitSIGPENDING                 uint64          `export:"LimitSIGPENDING"`
	LimitSIGPENDINGSoft             uint64          `export:"LimitSIGPENDINGSoft"`
	LimitSTACK                      uint64          `export:"LimitSTACK"`
	LimitSTACKSoft                  uint64          `export:"LimitSTACKSoft"`
	MainPID                         uint32          `export:"MainPID"`
	MemoryAccounting                bool            `export:"MemoryAccounting"`
	MemoryCurrent                   uint64          `export:"MemoryCurrent"`
	MemoryLimit                     uint64          `export:"MemoryLimit"`
	MountFlags                      uint64          `export:"MountFlags"`
	NFileDescriptorStore            uint32          `export:"NFileDescriptorStore"`
	Nice                            int32           `export:"Nice"`
	NoNewPrivileges                 bool            `export:"NoNewPrivileges"`
	NonBlocking                     bool            `export:"NonBlocking"`
	NotifyAccess                    string          `export:"NotifyAccess"`
	OOMScoreAdjust                  int32           `export:"OOMScoreAdjust"`
	PAMName                         string          `export:"PAMName"`
	PIDFile                         string          `export:"PIDFile"`
	PassEnvironment                 []string        `export:"PassEnvironment"`
	PermissionsStartOnly            bool            `export:"PermissionsStartOnly"`
	Personality                     string          `export:"Personality"`
	PrivateDevices                  bool            `export:"PrivateDevices"`
	PrivateNetwork                  bool            `export:"PrivateNetwork"`
	PrivateTmp                      bool            `export:"PrivateTmp"`
	ProtectHome                     string          `export:"ProtectHome"`
	ProtectSystem                   string          `export:"ProtectSystem"`
	ReadOnlyDirectories             []string        `export:"ReadOnlyDirectories"`
	ReadWriteDirectories            []string        `export:"ReadWriteDirectories"`
	RemainAfterExit                 bool            `export:"RemainAfterExit"`
	Restart                         string          `export:"Restart"`
	RestartUSec                     uint64          `export:"RestartUSec"`
	RestrictAddressFamilies         []interface{}   `export:"RestrictAddressFamilies"`
	Result                          string          `export:"Result"`
	RootDirectory                   string          `export:"RootDirectory"`
	RootDirectoryStartOnly          bool            `export:"RootDirectoryStartOnly"`
	RuntimeDirectory                []string        `export:"RuntimeDirectory"`
	RuntimeDirectoryMode            uint32          `export:"RuntimeDirectoryMode"`
	RuntimeMaxUSec                  uint64          `export:"RuntimeMaxUSec"`
	SELinuxContext                  []interface{}   `export:"SELinuxContext"`
	SameProcessGroup                bool            `export:"SameProcessGroup"`
	SecureBits                      int32           `export:"SecureBits"`
	SendSIGHUP                      bool            `export:"SendSIGHUP"`
	SendSIGKILL                     bool            `export:"SendSIGKILL"`
	Slice                           string          `export:"Slice"`
	SmackProcessLabel               []interface{}   `export:"SmackProcessLabel"`
	StandardError                   string          `export:"StandardError"`
	StandardInput                   string          `export:"StandardInput"`
	StandardOutput                  string          `export:"StandardOutput"`
	StartupBlockIOWeight            uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares                uint64          `export:"StartupCPUShares"`
	StatusErrno                     int32           `export:"StatusErrno"`
	StatusText                      string          `export:"StatusText"`
	SupplementaryGroups             []string        `export:"SupplementaryGroups"`
	SyslogFacility                  int32           `export:"SyslogFacility"`
	SyslogIdentifier                string          `export:"SyslogIdentifier"`
	SyslogLevel                     int32           `export:"SyslogLevel"`
	SyslogLevelPrefix               bool            `export:"SyslogLevelPrefix"`
	SyslogPriority                  int32           `export:"SyslogPriority"`
	SystemCallArchitectures         []string        `export:"SystemCallArchitectures"`
	SystemCallErrorNumber           int32           `export:"SystemCallErrorNumber"`
	SystemCallFilter                []interface{}   `export:"SystemCallFilter"`
	TTYPath                         string          `export:"TTYPath"`
	TTYReset                        bool            `export:"TTYReset"`
	TTYVHangup                      bool            `export:"TTYVHangup"`
	TTYVTDisallocate                bool            `export:"TTYVTDisallocate"`
	TasksAccounting                 bool            `export:"TasksAccounting"`
	TasksCurrent                    uint64          `export:"TasksCurrent"`
	TasksMax                        uint64          `export:"TasksMax"`
	TimeoutStartUSec                uint64          `export:"TimeoutStartUSec"`
	TimeoutStopUSec                 uint64          `export:"TimeoutStopUSec"`
	TimerSlackNSec                  uint64          `export:"TimerSlackNSec"`
	Type                            string          `export:"Type"`
	UMask                           uint32          `export:"UMask"`
	USBFunctionDescriptors          string          `export:"USBFunctionDescriptors"`
	USBFunctionStrings              string          `export:"USBFunctionStrings"`
	User                            string          `export:"User"`
	UtmpIdentifier                  string          `export:"UtmpIdentifier"`
	UtmpMode                        string          `export:"UtmpMode"`
	WatchdogTimestamp               uint64          `export:"WatchdogTimestamp"`
	WatchdogTimestampMonotonic      uint64          `export:"WatchdogTimestampMonotonic"`
	WatchdogUSec                    uint64          `export:"WatchdogUSec"`
	WorkingDirectory                string          `export:"WorkingDirectory"`
}

// newServiceTypePropertiesFromMap generates a new ServiceTypeProperties given a systemd property map
func newServiceTypePropertiesFromMap(m map[string]interface{}) *ServiceTypeProperties {
	s := &ServiceTypeProperties{}

	if val, ok := m["AmbientCapabilities"]; ok {
		s.AmbientCapabilities = val.(uint64)
	}

	if val, ok := m["AppArmorProfile"]; ok {
		s.AppArmorProfile = val.([]interface{})
	}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["BusName"]; ok {
		s.BusName = val.(string)
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUAffinity"]; ok {
		s.CPUAffinity = val.([]uint8)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUSchedulingPolicy"]; ok {
		s.CPUSchedulingPolicy = val.(int32)
	}

	if val, ok := m["CPUSchedulingPriority"]; ok {
		s.CPUSchedulingPriority = val.(int32)
	}

	if val, ok := m["CPUSchedulingResetOnFork"]; ok {
		s.CPUSchedulingResetOnFork = val.(bool)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["Capabilities"]; ok {
		s.Capabilities = val.(string)
	}

	if val, ok := m["CapabilityBoundingSet"]; ok {
		s.CapabilityBoundingSet = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["ControlPID"]; ok {
		s.ControlPID = val.(uint32)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["Environment"]; ok {
		s.Environment = val.([]string)
	}

	if val, ok := m["EnvironmentFiles"]; ok {
		s.EnvironmentFiles = val.([][]interface{})
	}

	if val, ok := m["ExecMainCode"]; ok {
		s.ExecMainCode = val.(int32)
	}

	if val, ok := m["ExecMainExitTimestamp"]; ok {
		s.ExecMainExitTimestamp = val.(uint64)
	}

	if val, ok := m["ExecMainExitTimestampMonotonic"]; ok {
		s.ExecMainExitTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["ExecMainPID"]; ok {
		s.ExecMainPID = val.(uint32)
	}

	if val, ok := m["ExecMainStartTimestamp"]; ok {
		s.ExecMainStartTimestamp = val.(uint64)
	}

	if val, ok := m["ExecMainStartTimestampMonotonic"]; ok {
		s.ExecMainStartTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["ExecMainStatus"]; ok {
		s.ExecMainStatus = val.(int32)
	}

	if val, ok := m["ExecReload"]; ok {
		s.ExecReload = val.([][]interface{})
	}

	if val, ok := m["ExecStart"]; ok {
		s.ExecStart = val.([][]interface{})
	}

	if val, ok := m["ExecStartPost"]; ok {
		s.ExecStartPost = val.([][]interface{})
	}

	if val, ok := m["ExecStartPre"]; ok {
		s.ExecStartPre = val.([][]interface{})
	}

	if val, ok := m["ExecStop"]; ok {
		s.ExecStop = val.([][]interface{})
	}

	if val, ok := m["ExecStopPost"]; ok {
		s.ExecStopPost = val.([][]interface{})
	}

	if val, ok := m["FailureAction"]; ok {
		s.FailureAction = val.(string)
	}

	if val, ok := m["FileDescriptorStoreMax"]; ok {
		s.FileDescriptorStoreMax = val.(uint32)
	}

	if val, ok := m["Group"]; ok {
		s.Group = val.(string)
	}

	if val, ok := m["GuessMainPID"]; ok {
		s.GuessMainPID = val.(bool)
	}

	if val, ok := m["IOScheduling"]; ok {
		s.IOScheduling = val.(int32)
	}

	if val, ok := m["IgnoreSIGPIPE"]; ok {
		s.IgnoreSIGPIPE = val.(bool)
	}

	if val, ok := m["InaccessibleDirectories"]; ok {
		s.InaccessibleDirectories = val.([]string)
	}

	if val, ok := m["KillMode"]; ok {
		s.KillMode = val.(string)
	}

	if val, ok := m["KillSignal"]; ok {
		s.KillSignal = val.(int32)
	}

	if val, ok := m["LimitAS"]; ok {
		s.LimitAS = val.(uint64)
	}

	if val, ok := m["LimitASSoft"]; ok {
		s.LimitASSoft = val.(uint64)
	}

	if val, ok := m["LimitCORE"]; ok {
		s.LimitCORE = val.(uint64)
	}

	if val, ok := m["LimitCORESoft"]; ok {
		s.LimitCORESoft = val.(uint64)
	}

	if val, ok := m["LimitCPU"]; ok {
		s.LimitCPU = val.(uint64)
	}

	if val, ok := m["LimitCPUSoft"]; ok {
		s.LimitCPUSoft = val.(uint64)
	}

	if val, ok := m["LimitDATA"]; ok {
		s.LimitDATA = val.(uint64)
	}

	if val, ok := m["LimitDATASoft"]; ok {
		s.LimitDATASoft = val.(uint64)
	}

	if val, ok := m["LimitFSIZE"]; ok {
		s.LimitFSIZE = val.(uint64)
	}

	if val, ok := m["LimitFSIZESoft"]; ok {
		s.LimitFSIZESoft = val.(uint64)
	}

	if val, ok := m["LimitLOCKS"]; ok {
		s.LimitLOCKS = val.(uint64)
	}

	if val, ok := m["LimitLOCKSSoft"]; ok {
		s.LimitLOCKSSoft = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCK"]; ok {
		s.LimitMEMLOCK = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCKSoft"]; ok {
		s.LimitMEMLOCKSoft = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUE"]; ok {
		s.LimitMSGQUEUE = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUESoft"]; ok {
		s.LimitMSGQUEUESoft = val.(uint64)
	}

	if val, ok := m["LimitNICE"]; ok {
		s.LimitNICE = val.(uint64)
	}

	if val, ok := m["LimitNICESoft"]; ok {
		s.LimitNICESoft = val.(uint64)
	}

	if val, ok := m["LimitNOFILE"]; ok {
		s.LimitNOFILE = val.(uint64)
	}

	if val, ok := m["LimitNOFILESoft"]; ok {
		s.LimitNOFILESoft = val.(uint64)
	}

	if val, ok := m["LimitNPROC"]; ok {
		s.LimitNPROC = val.(uint64)
	}

	if val, ok := m["LimitNPROCSoft"]; ok {
		s.LimitNPROCSoft = val.(uint64)
	}

	if val, ok := m["LimitRSS"]; ok {
		s.LimitRSS = val.(uint64)
	}

	if val, ok := m["LimitRSSSoft"]; ok {
		s.LimitRSSSoft = val.(uint64)
	}

	if val, ok := m["LimitRTPRIO"]; ok {
		s.LimitRTPRIO = val.(uint64)
	}

	if val, ok := m["LimitRTPRIOSoft"]; ok {
		s.LimitRTPRIOSoft = val.(uint64)
	}

	if val, ok := m["LimitRTTIME"]; ok {
		s.LimitRTTIME = val.(uint64)
	}

	if val, ok := m["LimitRTTIMESoft"]; ok {
		s.LimitRTTIMESoft = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDING"]; ok {
		s.LimitSIGPENDING = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDINGSoft"]; ok {
		s.LimitSIGPENDINGSoft = val.(uint64)
	}

	if val, ok := m["LimitSTACK"]; ok {
		s.LimitSTACK = val.(uint64)
	}

	if val, ok := m["LimitSTACKSoft"]; ok {
		s.LimitSTACKSoft = val.(uint64)
	}

	if val, ok := m["MainPID"]; ok {
		s.MainPID = val.(uint32)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["MountFlags"]; ok {
		s.MountFlags = val.(uint64)
	}

	if val, ok := m["NFileDescriptorStore"]; ok {
		s.NFileDescriptorStore = val.(uint32)
	}

	if val, ok := m["Nice"]; ok {
		s.Nice = val.(int32)
	}

	if val, ok := m["NoNewPrivileges"]; ok {
		s.NoNewPrivileges = val.(bool)
	}

	if val, ok := m["NonBlocking"]; ok {
		s.NonBlocking = val.(bool)
	}

	if val, ok := m["NotifyAccess"]; ok {
		s.NotifyAccess = val.(string)
	}

	if val, ok := m["OOMScoreAdjust"]; ok {
		s.OOMScoreAdjust = val.(int32)
	}

	if val, ok := m["PAMName"]; ok {
		s.PAMName = val.(string)
	}

	if val, ok := m["PIDFile"]; ok {
		s.PIDFile = val.(string)
	}

	if val, ok := m["PassEnvironment"]; ok {
		s.PassEnvironment = val.([]string)
	}

	if val, ok := m["PermissionsStartOnly"]; ok {
		s.PermissionsStartOnly = val.(bool)
	}

	if val, ok := m["Personality"]; ok {
		s.Personality = val.(string)
	}

	if val, ok := m["PrivateDevices"]; ok {
		s.PrivateDevices = val.(bool)
	}

	if val, ok := m["PrivateNetwork"]; ok {
		s.PrivateNetwork = val.(bool)
	}

	if val, ok := m["PrivateTmp"]; ok {
		s.PrivateTmp = val.(bool)
	}

	if val, ok := m["ProtectHome"]; ok {
		s.ProtectHome = val.(string)
	}

	if val, ok := m["ProtectSystem"]; ok {
		s.ProtectSystem = val.(string)
	}

	if val, ok := m["ReadOnlyDirectories"]; ok {
		s.ReadOnlyDirectories = val.([]string)
	}

	if val, ok := m["ReadWriteDirectories"]; ok {
		s.ReadWriteDirectories = val.([]string)
	}

	if val, ok := m["RemainAfterExit"]; ok {
		s.RemainAfterExit = val.(bool)
	}

	if val, ok := m["Restart"]; ok {
		s.Restart = val.(string)
	}

	if val, ok := m["RestartUSec"]; ok {
		s.RestartUSec = val.(uint64)
	}

	if val, ok := m["RestrictAddressFamilies"]; ok {
		s.RestrictAddressFamilies = val.([]interface{})
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["RootDirectory"]; ok {
		s.RootDirectory = val.(string)
	}

	if val, ok := m["RootDirectoryStartOnly"]; ok {
		s.RootDirectoryStartOnly = val.(bool)
	}

	if val, ok := m["RuntimeDirectory"]; ok {
		s.RuntimeDirectory = val.([]string)
	}

	if val, ok := m["RuntimeDirectoryMode"]; ok {
		s.RuntimeDirectoryMode = val.(uint32)
	}

	if val, ok := m["RuntimeMaxUSec"]; ok {
		s.RuntimeMaxUSec = val.(uint64)
	}

	if val, ok := m["SELinuxContext"]; ok {
		s.SELinuxContext = val.([]interface{})
	}

	if val, ok := m["SameProcessGroup"]; ok {
		s.SameProcessGroup = val.(bool)
	}

	if val, ok := m["SecureBits"]; ok {
		s.SecureBits = val.(int32)
	}

	if val, ok := m["SendSIGHUP"]; ok {
		s.SendSIGHUP = val.(bool)
	}

	if val, ok := m["SendSIGKILL"]; ok {
		s.SendSIGKILL = val.(bool)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["SmackProcessLabel"]; ok {
		s.SmackProcessLabel = val.([]interface{})
	}

	if val, ok := m["StandardError"]; ok {
		s.StandardError = val.(string)
	}

	if val, ok := m["StandardInput"]; ok {
		s.StandardInput = val.(string)
	}

	if val, ok := m["StandardOutput"]; ok {
		s.StandardOutput = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["StatusErrno"]; ok {
		s.StatusErrno = val.(int32)
	}

	if val, ok := m["StatusText"]; ok {
		s.StatusText = val.(string)
	}

	if val, ok := m["SupplementaryGroups"]; ok {
		s.SupplementaryGroups = val.([]string)
	}

	if val, ok := m["SyslogFacility"]; ok {
		s.SyslogFacility = val.(int32)
	}

	if val, ok := m["SyslogIdentifier"]; ok {
		s.SyslogIdentifier = val.(string)
	}

	if val, ok := m["SyslogLevel"]; ok {
		s.SyslogLevel = val.(int32)
	}

	if val, ok := m["SyslogLevelPrefix"]; ok {
		s.SyslogLevelPrefix = val.(bool)
	}

	if val, ok := m["SyslogPriority"]; ok {
		s.SyslogPriority = val.(int32)
	}

	if val, ok := m["SystemCallArchitectures"]; ok {
		s.SystemCallArchitectures = val.([]string)
	}

	if val, ok := m["SystemCallErrorNumber"]; ok {
		s.SystemCallErrorNumber = val.(int32)
	}

	if val, ok := m["SystemCallFilter"]; ok {
		s.SystemCallFilter = val.([]interface{})
	}

	if val, ok := m["TTYPath"]; ok {
		s.TTYPath = val.(string)
	}

	if val, ok := m["TTYReset"]; ok {
		s.TTYReset = val.(bool)
	}

	if val, ok := m["TTYVHangup"]; ok {
		s.TTYVHangup = val.(bool)
	}

	if val, ok := m["TTYVTDisallocate"]; ok {
		s.TTYVTDisallocate = val.(bool)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}

	if val, ok := m["TimeoutStartUSec"]; ok {
		s.TimeoutStartUSec = val.(uint64)
	}

	if val, ok := m["TimeoutStopUSec"]; ok {
		s.TimeoutStopUSec = val.(uint64)
	}

	if val, ok := m["TimerSlackNSec"]; ok {
		s.TimerSlackNSec = val.(uint64)
	}

	if val, ok := m["Type"]; ok {
		s.Type = val.(string)
	}

	if val, ok := m["UMask"]; ok {
		s.UMask = val.(uint32)
	}

	if val, ok := m["USBFunctionDescriptors"]; ok {
		s.USBFunctionDescriptors = val.(string)
	}

	if val, ok := m["USBFunctionStrings"]; ok {
		s.USBFunctionStrings = val.(string)
	}

	if val, ok := m["User"]; ok {
		s.User = val.(string)
	}

	if val, ok := m["UtmpIdentifier"]; ok {
		s.UtmpIdentifier = val.(string)
	}

	if val, ok := m["UtmpMode"]; ok {
		s.UtmpMode = val.(string)
	}

	if val, ok := m["WatchdogTimestamp"]; ok {
		s.WatchdogTimestamp = val.(uint64)
	}

	if val, ok := m["WatchdogTimestampMonotonic"]; ok {
		s.WatchdogTimestampMonotonic = val.(uint64)
	}

	if val, ok := m["WatchdogUSec"]; ok {
		s.WatchdogUSec = val.(uint64)
	}

	if val, ok := m["WorkingDirectory"]; ok {
		s.WorkingDirectory = val.(string)
	}
	return s
}

// SocketTypeProperties wraps the dbus api for system with properties from this unit type
type SocketTypeProperties struct {
	Accept                   bool            `export:"Accept"`
	AmbientCapabilities      uint64          `export:"AmbientCapabilities"`
	AppArmorProfile          []interface{}   `export:"AppArmorProfile"`
	Backlog                  uint32          `export:"Backlog"`
	BindIPv6Only             string          `export:"BindIPv6Only"`
	BindToDevice             string          `export:"BindToDevice"`
	BlockIOAccounting        bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight      [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth     [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight            uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth    [][]interface{} `export:"BlockIOWriteBandwidth"`
	Broadcast                bool            `export:"Broadcast"`
	CPUAccounting            bool            `export:"CPUAccounting"`
	CPUAffinity              []uint8         `export:"CPUAffinity"`
	CPUQuotaPerSecUSec       uint64          `export:"CPUQuotaPerSecUSec"`
	CPUSchedulingPolicy      int32           `export:"CPUSchedulingPolicy"`
	CPUSchedulingPriority    int32           `export:"CPUSchedulingPriority"`
	CPUSchedulingResetOnFork bool            `export:"CPUSchedulingResetOnFork"`
	CPUShares                uint64          `export:"CPUShares"`
	CPUUsageNSec             uint64          `export:"CPUUsageNSec"`
	Capabilities             string          `export:"Capabilities"`
	CapabilityBoundingSet    uint64          `export:"CapabilityBoundingSet"`
	ControlGroup             string          `export:"ControlGroup"`
	ControlPID               uint32          `export:"ControlPID"`
	DeferAcceptUSec          uint64          `export:"DeferAcceptUSec"`
	Delegate                 bool            `export:"Delegate"`
	DeviceAllow              [][]interface{} `export:"DeviceAllow"`
	DevicePolicy             string          `export:"DevicePolicy"`
	DirectoryMode            uint32          `export:"DirectoryMode"`
	Environment              []string        `export:"Environment"`
	EnvironmentFiles         [][]interface{} `export:"EnvironmentFiles"`
	ExecStartPost            [][]interface{} `export:"ExecStartPost"`
	ExecStartPre             [][]interface{} `export:"ExecStartPre"`
	ExecStopPost             [][]interface{} `export:"ExecStopPost"`
	ExecStopPre              [][]interface{} `export:"ExecStopPre"`
	FileDescriptorName       string          `export:"FileDescriptorName"`
	FreeBind                 bool            `export:"FreeBind"`
	Group                    string          `export:"Group"`
	IOScheduling             int32           `export:"IOScheduling"`
	IPTOS                    int32           `export:"IPTOS"`
	IPTTL                    int32           `export:"IPTTL"`
	IgnoreSIGPIPE            bool            `export:"IgnoreSIGPIPE"`
	InaccessibleDirectories  []string        `export:"InaccessibleDirectories"`
	KeepAlive                bool            `export:"KeepAlive"`
	KeepAliveIntervalUSec    uint64          `export:"KeepAliveIntervalUSec"`
	KeepAliveProbes          uint32          `export:"KeepAliveProbes"`
	KeepAliveTimeUSec        uint64          `export:"KeepAliveTimeUSec"`
	KillMode                 string          `export:"KillMode"`
	KillSignal               int32           `export:"KillSignal"`
	LimitAS                  uint64          `export:"LimitAS"`
	LimitASSoft              uint64          `export:"LimitASSoft"`
	LimitCORE                uint64          `export:"LimitCORE"`
	LimitCORESoft            uint64          `export:"LimitCORESoft"`
	LimitCPU                 uint64          `export:"LimitCPU"`
	LimitCPUSoft             uint64          `export:"LimitCPUSoft"`
	LimitDATA                uint64          `export:"LimitDATA"`
	LimitDATASoft            uint64          `export:"LimitDATASoft"`
	LimitFSIZE               uint64          `export:"LimitFSIZE"`
	LimitFSIZESoft           uint64          `export:"LimitFSIZESoft"`
	LimitLOCKS               uint64          `export:"LimitLOCKS"`
	LimitLOCKSSoft           uint64          `export:"LimitLOCKSSoft"`
	LimitMEMLOCK             uint64          `export:"LimitMEMLOCK"`
	LimitMEMLOCKSoft         uint64          `export:"LimitMEMLOCKSoft"`
	LimitMSGQUEUE            uint64          `export:"LimitMSGQUEUE"`
	LimitMSGQUEUESoft        uint64          `export:"LimitMSGQUEUESoft"`
	LimitNICE                uint64          `export:"LimitNICE"`
	LimitNICESoft            uint64          `export:"LimitNICESoft"`
	LimitNOFILE              uint64          `export:"LimitNOFILE"`
	LimitNOFILESoft          uint64          `export:"LimitNOFILESoft"`
	LimitNPROC               uint64          `export:"LimitNPROC"`
	LimitNPROCSoft           uint64          `export:"LimitNPROCSoft"`
	LimitRSS                 uint64          `export:"LimitRSS"`
	LimitRSSSoft             uint64          `export:"LimitRSSSoft"`
	LimitRTPRIO              uint64          `export:"LimitRTPRIO"`
	LimitRTPRIOSoft          uint64          `export:"LimitRTPRIOSoft"`
	LimitRTTIME              uint64          `export:"LimitRTTIME"`
	LimitRTTIMESoft          uint64          `export:"LimitRTTIMESoft"`
	LimitSIGPENDING          uint64          `export:"LimitSIGPENDING"`
	LimitSIGPENDINGSoft      uint64          `export:"LimitSIGPENDINGSoft"`
	LimitSTACK               uint64          `export:"LimitSTACK"`
	LimitSTACKSoft           uint64          `export:"LimitSTACKSoft"`
	Listen                   [][]interface{} `export:"Listen"`
	Mark                     int32           `export:"Mark"`
	MaxConnections           uint32          `export:"MaxConnections"`
	MemoryAccounting         bool            `export:"MemoryAccounting"`
	MemoryCurrent            uint64          `export:"MemoryCurrent"`
	MemoryLimit              uint64          `export:"MemoryLimit"`
	MessageQueueMaxMessages  int64           `export:"MessageQueueMaxMessages"`
	MessageQueueMessageSize  int64           `export:"MessageQueueMessageSize"`
	MountFlags               uint64          `export:"MountFlags"`
	NAccepted                uint32          `export:"NAccepted"`
	NConnections             uint32          `export:"NConnections"`
	Nice                     int32           `export:"Nice"`
	NoDelay                  bool            `export:"NoDelay"`
	NoNewPrivileges          bool            `export:"NoNewPrivileges"`
	NonBlocking              bool            `export:"NonBlocking"`
	OOMScoreAdjust           int32           `export:"OOMScoreAdjust"`
	PAMName                  string          `export:"PAMName"`
	PassCredentials          bool            `export:"PassCredentials"`
	PassEnvironment          []string        `export:"PassEnvironment"`
	PassSecurity             bool            `export:"PassSecurity"`
	Personality              string          `export:"Personality"`
	PipeSize                 uint64          `export:"PipeSize"`
	Priority                 int32           `export:"Priority"`
	PrivateDevices           bool            `export:"PrivateDevices"`
	PrivateNetwork           bool            `export:"PrivateNetwork"`
	PrivateTmp               bool            `export:"PrivateTmp"`
	ProtectHome              string          `export:"ProtectHome"`
	ProtectSystem            string          `export:"ProtectSystem"`
	ReadOnlyDirectories      []string        `export:"ReadOnlyDirectories"`
	ReadWriteDirectories     []string        `export:"ReadWriteDirectories"`
	ReceiveBuffer            uint64          `export:"ReceiveBuffer"`
	RemoveOnStop             bool            `export:"RemoveOnStop"`
	RestrictAddressFamilies  []interface{}   `export:"RestrictAddressFamilies"`
	Result                   string          `export:"Result"`
	ReusePort                bool            `export:"ReusePort"`
	RootDirectory            string          `export:"RootDirectory"`
	RuntimeDirectory         []string        `export:"RuntimeDirectory"`
	RuntimeDirectoryMode     uint32          `export:"RuntimeDirectoryMode"`
	SELinuxContext           []interface{}   `export:"SELinuxContext"`
	SameProcessGroup         bool            `export:"SameProcessGroup"`
	SecureBits               int32           `export:"SecureBits"`
	SendBuffer               uint64          `export:"SendBuffer"`
	SendSIGHUP               bool            `export:"SendSIGHUP"`
	SendSIGKILL              bool            `export:"SendSIGKILL"`
	Slice                    string          `export:"Slice"`
	SmackLabel               string          `export:"SmackLabel"`
	SmackLabelIPIn           string          `export:"SmackLabelIPIn"`
	SmackLabelIPOut          string          `export:"SmackLabelIPOut"`
	SmackProcessLabel        []interface{}   `export:"SmackProcessLabel"`
	SocketGroup              string          `export:"SocketGroup"`
	SocketMode               uint32          `export:"SocketMode"`
	SocketProtocol           int32           `export:"SocketProtocol"`
	SocketUser               string          `export:"SocketUser"`
	StandardError            string          `export:"StandardError"`
	StandardInput            string          `export:"StandardInput"`
	StandardOutput           string          `export:"StandardOutput"`
	StartupBlockIOWeight     uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares         uint64          `export:"StartupCPUShares"`
	SupplementaryGroups      []string        `export:"SupplementaryGroups"`
	Symlinks                 []string        `export:"Symlinks"`
	SyslogFacility           int32           `export:"SyslogFacility"`
	SyslogIdentifier         string          `export:"SyslogIdentifier"`
	SyslogLevel              int32           `export:"SyslogLevel"`
	SyslogLevelPrefix        bool            `export:"SyslogLevelPrefix"`
	SyslogPriority           int32           `export:"SyslogPriority"`
	SystemCallArchitectures  []string        `export:"SystemCallArchitectures"`
	SystemCallErrorNumber    int32           `export:"SystemCallErrorNumber"`
	SystemCallFilter         []interface{}   `export:"SystemCallFilter"`
	TTYPath                  string          `export:"TTYPath"`
	TTYReset                 bool            `export:"TTYReset"`
	TTYVHangup               bool            `export:"TTYVHangup"`
	TTYVTDisallocate         bool            `export:"TTYVTDisallocate"`
	TasksAccounting          bool            `export:"TasksAccounting"`
	TasksCurrent             uint64          `export:"TasksCurrent"`
	TasksMax                 uint64          `export:"TasksMax"`
	TimeoutUSec              uint64          `export:"TimeoutUSec"`
	TimerSlackNSec           uint64          `export:"TimerSlackNSec"`
	Transparent              bool            `export:"Transparent"`
	TriggerLimitBurst        uint32          `export:"TriggerLimitBurst"`
	TriggerLimitIntervalSec  uint64          `export:"TriggerLimitIntervalSec"`
	UMask                    uint32          `export:"UMask"`
	User                     string          `export:"User"`
	UtmpIdentifier           string          `export:"UtmpIdentifier"`
	UtmpMode                 string          `export:"UtmpMode"`
	WorkingDirectory         string          `export:"WorkingDirectory"`
	Writable                 bool            `export:"Writable"`
}

// newSocketTypePropertiesFromMap generates a new SocketTypeProperties given a systemd property map
func newSocketTypePropertiesFromMap(m map[string]interface{}) *SocketTypeProperties {
	s := &SocketTypeProperties{}

	if val, ok := m["Accept"]; ok {
		s.Accept = val.(bool)
	}

	if val, ok := m["AmbientCapabilities"]; ok {
		s.AmbientCapabilities = val.(uint64)
	}

	if val, ok := m["AppArmorProfile"]; ok {
		s.AppArmorProfile = val.([]interface{})
	}

	if val, ok := m["Backlog"]; ok {
		s.Backlog = val.(uint32)
	}

	if val, ok := m["BindIPv6Only"]; ok {
		s.BindIPv6Only = val.(string)
	}

	if val, ok := m["BindToDevice"]; ok {
		s.BindToDevice = val.(string)
	}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["Broadcast"]; ok {
		s.Broadcast = val.(bool)
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUAffinity"]; ok {
		s.CPUAffinity = val.([]uint8)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUSchedulingPolicy"]; ok {
		s.CPUSchedulingPolicy = val.(int32)
	}

	if val, ok := m["CPUSchedulingPriority"]; ok {
		s.CPUSchedulingPriority = val.(int32)
	}

	if val, ok := m["CPUSchedulingResetOnFork"]; ok {
		s.CPUSchedulingResetOnFork = val.(bool)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["Capabilities"]; ok {
		s.Capabilities = val.(string)
	}

	if val, ok := m["CapabilityBoundingSet"]; ok {
		s.CapabilityBoundingSet = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["ControlPID"]; ok {
		s.ControlPID = val.(uint32)
	}

	if val, ok := m["DeferAcceptUSec"]; ok {
		s.DeferAcceptUSec = val.(uint64)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["DirectoryMode"]; ok {
		s.DirectoryMode = val.(uint32)
	}

	if val, ok := m["Environment"]; ok {
		s.Environment = val.([]string)
	}

	if val, ok := m["EnvironmentFiles"]; ok {
		s.EnvironmentFiles = val.([][]interface{})
	}

	if val, ok := m["ExecStartPost"]; ok {
		s.ExecStartPost = val.([][]interface{})
	}

	if val, ok := m["ExecStartPre"]; ok {
		s.ExecStartPre = val.([][]interface{})
	}

	if val, ok := m["ExecStopPost"]; ok {
		s.ExecStopPost = val.([][]interface{})
	}

	if val, ok := m["ExecStopPre"]; ok {
		s.ExecStopPre = val.([][]interface{})
	}

	if val, ok := m["FileDescriptorName"]; ok {
		s.FileDescriptorName = val.(string)
	}

	if val, ok := m["FreeBind"]; ok {
		s.FreeBind = val.(bool)
	}

	if val, ok := m["Group"]; ok {
		s.Group = val.(string)
	}

	if val, ok := m["IOScheduling"]; ok {
		s.IOScheduling = val.(int32)
	}

	if val, ok := m["IPTOS"]; ok {
		s.IPTOS = val.(int32)
	}

	if val, ok := m["IPTTL"]; ok {
		s.IPTTL = val.(int32)
	}

	if val, ok := m["IgnoreSIGPIPE"]; ok {
		s.IgnoreSIGPIPE = val.(bool)
	}

	if val, ok := m["InaccessibleDirectories"]; ok {
		s.InaccessibleDirectories = val.([]string)
	}

	if val, ok := m["KeepAlive"]; ok {
		s.KeepAlive = val.(bool)
	}

	if val, ok := m["KeepAliveIntervalUSec"]; ok {
		s.KeepAliveIntervalUSec = val.(uint64)
	}

	if val, ok := m["KeepAliveProbes"]; ok {
		s.KeepAliveProbes = val.(uint32)
	}

	if val, ok := m["KeepAliveTimeUSec"]; ok {
		s.KeepAliveTimeUSec = val.(uint64)
	}

	if val, ok := m["KillMode"]; ok {
		s.KillMode = val.(string)
	}

	if val, ok := m["KillSignal"]; ok {
		s.KillSignal = val.(int32)
	}

	if val, ok := m["LimitAS"]; ok {
		s.LimitAS = val.(uint64)
	}

	if val, ok := m["LimitASSoft"]; ok {
		s.LimitASSoft = val.(uint64)
	}

	if val, ok := m["LimitCORE"]; ok {
		s.LimitCORE = val.(uint64)
	}

	if val, ok := m["LimitCORESoft"]; ok {
		s.LimitCORESoft = val.(uint64)
	}

	if val, ok := m["LimitCPU"]; ok {
		s.LimitCPU = val.(uint64)
	}

	if val, ok := m["LimitCPUSoft"]; ok {
		s.LimitCPUSoft = val.(uint64)
	}

	if val, ok := m["LimitDATA"]; ok {
		s.LimitDATA = val.(uint64)
	}

	if val, ok := m["LimitDATASoft"]; ok {
		s.LimitDATASoft = val.(uint64)
	}

	if val, ok := m["LimitFSIZE"]; ok {
		s.LimitFSIZE = val.(uint64)
	}

	if val, ok := m["LimitFSIZESoft"]; ok {
		s.LimitFSIZESoft = val.(uint64)
	}

	if val, ok := m["LimitLOCKS"]; ok {
		s.LimitLOCKS = val.(uint64)
	}

	if val, ok := m["LimitLOCKSSoft"]; ok {
		s.LimitLOCKSSoft = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCK"]; ok {
		s.LimitMEMLOCK = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCKSoft"]; ok {
		s.LimitMEMLOCKSoft = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUE"]; ok {
		s.LimitMSGQUEUE = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUESoft"]; ok {
		s.LimitMSGQUEUESoft = val.(uint64)
	}

	if val, ok := m["LimitNICE"]; ok {
		s.LimitNICE = val.(uint64)
	}

	if val, ok := m["LimitNICESoft"]; ok {
		s.LimitNICESoft = val.(uint64)
	}

	if val, ok := m["LimitNOFILE"]; ok {
		s.LimitNOFILE = val.(uint64)
	}

	if val, ok := m["LimitNOFILESoft"]; ok {
		s.LimitNOFILESoft = val.(uint64)
	}

	if val, ok := m["LimitNPROC"]; ok {
		s.LimitNPROC = val.(uint64)
	}

	if val, ok := m["LimitNPROCSoft"]; ok {
		s.LimitNPROCSoft = val.(uint64)
	}

	if val, ok := m["LimitRSS"]; ok {
		s.LimitRSS = val.(uint64)
	}

	if val, ok := m["LimitRSSSoft"]; ok {
		s.LimitRSSSoft = val.(uint64)
	}

	if val, ok := m["LimitRTPRIO"]; ok {
		s.LimitRTPRIO = val.(uint64)
	}

	if val, ok := m["LimitRTPRIOSoft"]; ok {
		s.LimitRTPRIOSoft = val.(uint64)
	}

	if val, ok := m["LimitRTTIME"]; ok {
		s.LimitRTTIME = val.(uint64)
	}

	if val, ok := m["LimitRTTIMESoft"]; ok {
		s.LimitRTTIMESoft = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDING"]; ok {
		s.LimitSIGPENDING = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDINGSoft"]; ok {
		s.LimitSIGPENDINGSoft = val.(uint64)
	}

	if val, ok := m["LimitSTACK"]; ok {
		s.LimitSTACK = val.(uint64)
	}

	if val, ok := m["LimitSTACKSoft"]; ok {
		s.LimitSTACKSoft = val.(uint64)
	}

	if val, ok := m["Listen"]; ok {
		s.Listen = val.([][]interface{})
	}

	if val, ok := m["Mark"]; ok {
		s.Mark = val.(int32)
	}

	if val, ok := m["MaxConnections"]; ok {
		s.MaxConnections = val.(uint32)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["MessageQueueMaxMessages"]; ok {
		s.MessageQueueMaxMessages = val.(int64)
	}

	if val, ok := m["MessageQueueMessageSize"]; ok {
		s.MessageQueueMessageSize = val.(int64)
	}

	if val, ok := m["MountFlags"]; ok {
		s.MountFlags = val.(uint64)
	}

	if val, ok := m["NAccepted"]; ok {
		s.NAccepted = val.(uint32)
	}

	if val, ok := m["NConnections"]; ok {
		s.NConnections = val.(uint32)
	}

	if val, ok := m["Nice"]; ok {
		s.Nice = val.(int32)
	}

	if val, ok := m["NoDelay"]; ok {
		s.NoDelay = val.(bool)
	}

	if val, ok := m["NoNewPrivileges"]; ok {
		s.NoNewPrivileges = val.(bool)
	}

	if val, ok := m["NonBlocking"]; ok {
		s.NonBlocking = val.(bool)
	}

	if val, ok := m["OOMScoreAdjust"]; ok {
		s.OOMScoreAdjust = val.(int32)
	}

	if val, ok := m["PAMName"]; ok {
		s.PAMName = val.(string)
	}

	if val, ok := m["PassCredentials"]; ok {
		s.PassCredentials = val.(bool)
	}

	if val, ok := m["PassEnvironment"]; ok {
		s.PassEnvironment = val.([]string)
	}

	if val, ok := m["PassSecurity"]; ok {
		s.PassSecurity = val.(bool)
	}

	if val, ok := m["Personality"]; ok {
		s.Personality = val.(string)
	}

	if val, ok := m["PipeSize"]; ok {
		s.PipeSize = val.(uint64)
	}

	if val, ok := m["Priority"]; ok {
		s.Priority = val.(int32)
	}

	if val, ok := m["PrivateDevices"]; ok {
		s.PrivateDevices = val.(bool)
	}

	if val, ok := m["PrivateNetwork"]; ok {
		s.PrivateNetwork = val.(bool)
	}

	if val, ok := m["PrivateTmp"]; ok {
		s.PrivateTmp = val.(bool)
	}

	if val, ok := m["ProtectHome"]; ok {
		s.ProtectHome = val.(string)
	}

	if val, ok := m["ProtectSystem"]; ok {
		s.ProtectSystem = val.(string)
	}

	if val, ok := m["ReadOnlyDirectories"]; ok {
		s.ReadOnlyDirectories = val.([]string)
	}

	if val, ok := m["ReadWriteDirectories"]; ok {
		s.ReadWriteDirectories = val.([]string)
	}

	if val, ok := m["ReceiveBuffer"]; ok {
		s.ReceiveBuffer = val.(uint64)
	}

	if val, ok := m["RemoveOnStop"]; ok {
		s.RemoveOnStop = val.(bool)
	}

	if val, ok := m["RestrictAddressFamilies"]; ok {
		s.RestrictAddressFamilies = val.([]interface{})
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["ReusePort"]; ok {
		s.ReusePort = val.(bool)
	}

	if val, ok := m["RootDirectory"]; ok {
		s.RootDirectory = val.(string)
	}

	if val, ok := m["RuntimeDirectory"]; ok {
		s.RuntimeDirectory = val.([]string)
	}

	if val, ok := m["RuntimeDirectoryMode"]; ok {
		s.RuntimeDirectoryMode = val.(uint32)
	}

	if val, ok := m["SELinuxContext"]; ok {
		s.SELinuxContext = val.([]interface{})
	}

	if val, ok := m["SameProcessGroup"]; ok {
		s.SameProcessGroup = val.(bool)
	}

	if val, ok := m["SecureBits"]; ok {
		s.SecureBits = val.(int32)
	}

	if val, ok := m["SendBuffer"]; ok {
		s.SendBuffer = val.(uint64)
	}

	if val, ok := m["SendSIGHUP"]; ok {
		s.SendSIGHUP = val.(bool)
	}

	if val, ok := m["SendSIGKILL"]; ok {
		s.SendSIGKILL = val.(bool)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["SmackLabel"]; ok {
		s.SmackLabel = val.(string)
	}

	if val, ok := m["SmackLabelIPIn"]; ok {
		s.SmackLabelIPIn = val.(string)
	}

	if val, ok := m["SmackLabelIPOut"]; ok {
		s.SmackLabelIPOut = val.(string)
	}

	if val, ok := m["SmackProcessLabel"]; ok {
		s.SmackProcessLabel = val.([]interface{})
	}

	if val, ok := m["SocketGroup"]; ok {
		s.SocketGroup = val.(string)
	}

	if val, ok := m["SocketMode"]; ok {
		s.SocketMode = val.(uint32)
	}

	if val, ok := m["SocketProtocol"]; ok {
		s.SocketProtocol = val.(int32)
	}

	if val, ok := m["SocketUser"]; ok {
		s.SocketUser = val.(string)
	}

	if val, ok := m["StandardError"]; ok {
		s.StandardError = val.(string)
	}

	if val, ok := m["StandardInput"]; ok {
		s.StandardInput = val.(string)
	}

	if val, ok := m["StandardOutput"]; ok {
		s.StandardOutput = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["SupplementaryGroups"]; ok {
		s.SupplementaryGroups = val.([]string)
	}

	if val, ok := m["Symlinks"]; ok {
		s.Symlinks = val.([]string)
	}

	if val, ok := m["SyslogFacility"]; ok {
		s.SyslogFacility = val.(int32)
	}

	if val, ok := m["SyslogIdentifier"]; ok {
		s.SyslogIdentifier = val.(string)
	}

	if val, ok := m["SyslogLevel"]; ok {
		s.SyslogLevel = val.(int32)
	}

	if val, ok := m["SyslogLevelPrefix"]; ok {
		s.SyslogLevelPrefix = val.(bool)
	}

	if val, ok := m["SyslogPriority"]; ok {
		s.SyslogPriority = val.(int32)
	}

	if val, ok := m["SystemCallArchitectures"]; ok {
		s.SystemCallArchitectures = val.([]string)
	}

	if val, ok := m["SystemCallErrorNumber"]; ok {
		s.SystemCallErrorNumber = val.(int32)
	}

	if val, ok := m["SystemCallFilter"]; ok {
		s.SystemCallFilter = val.([]interface{})
	}

	if val, ok := m["TTYPath"]; ok {
		s.TTYPath = val.(string)
	}

	if val, ok := m["TTYReset"]; ok {
		s.TTYReset = val.(bool)
	}

	if val, ok := m["TTYVHangup"]; ok {
		s.TTYVHangup = val.(bool)
	}

	if val, ok := m["TTYVTDisallocate"]; ok {
		s.TTYVTDisallocate = val.(bool)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}

	if val, ok := m["TimeoutUSec"]; ok {
		s.TimeoutUSec = val.(uint64)
	}

	if val, ok := m["TimerSlackNSec"]; ok {
		s.TimerSlackNSec = val.(uint64)
	}

	if val, ok := m["Transparent"]; ok {
		s.Transparent = val.(bool)
	}

	if val, ok := m["TriggerLimitBurst"]; ok {
		s.TriggerLimitBurst = val.(uint32)
	}

	if val, ok := m["TriggerLimitIntervalSec"]; ok {
		s.TriggerLimitIntervalSec = val.(uint64)
	}

	if val, ok := m["UMask"]; ok {
		s.UMask = val.(uint32)
	}

	if val, ok := m["User"]; ok {
		s.User = val.(string)
	}

	if val, ok := m["UtmpIdentifier"]; ok {
		s.UtmpIdentifier = val.(string)
	}

	if val, ok := m["UtmpMode"]; ok {
		s.UtmpMode = val.(string)
	}

	if val, ok := m["WorkingDirectory"]; ok {
		s.WorkingDirectory = val.(string)
	}

	if val, ok := m["Writable"]; ok {
		s.Writable = val.(bool)
	}
	return s
}

// DeviceTypeProperties wraps the dbus api for system with properties from this unit type
type DeviceTypeProperties struct {
	SysFSPath string `export:"SysFSPath"`
}

// newDeviceTypePropertiesFromMap generates a new DeviceTypeProperties given a systemd property map
func newDeviceTypePropertiesFromMap(m map[string]interface{}) *DeviceTypeProperties {
	s := &DeviceTypeProperties{}

	if val, ok := m["SysFSPath"]; ok {
		s.SysFSPath = val.(string)
	}
	return s
}

// MountTypeProperties wraps the dbus api for system with properties from this unit type
type MountTypeProperties struct {
	AmbientCapabilities      uint64          `export:"AmbientCapabilities"`
	AppArmorProfile          []interface{}   `export:"AppArmorProfile"`
	BlockIOAccounting        bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight      [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth     [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight            uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth    [][]interface{} `export:"BlockIOWriteBandwidth"`
	CPUAccounting            bool            `export:"CPUAccounting"`
	CPUAffinity              []uint8         `export:"CPUAffinity"`
	CPUQuotaPerSecUSec       uint64          `export:"CPUQuotaPerSecUSec"`
	CPUSchedulingPolicy      int32           `export:"CPUSchedulingPolicy"`
	CPUSchedulingPriority    int32           `export:"CPUSchedulingPriority"`
	CPUSchedulingResetOnFork bool            `export:"CPUSchedulingResetOnFork"`
	CPUShares                uint64          `export:"CPUShares"`
	CPUUsageNSec             uint64          `export:"CPUUsageNSec"`
	Capabilities             string          `export:"Capabilities"`
	CapabilityBoundingSet    uint64          `export:"CapabilityBoundingSet"`
	ControlGroup             string          `export:"ControlGroup"`
	ControlPID               uint32          `export:"ControlPID"`
	Delegate                 bool            `export:"Delegate"`
	DeviceAllow              [][]interface{} `export:"DeviceAllow"`
	DevicePolicy             string          `export:"DevicePolicy"`
	DirectoryMode            uint32          `export:"DirectoryMode"`
	Environment              []string        `export:"Environment"`
	EnvironmentFiles         [][]interface{} `export:"EnvironmentFiles"`
	ExecMount                [][]interface{} `export:"ExecMount"`
	ExecRemount              [][]interface{} `export:"ExecRemount"`
	ExecUnmount              [][]interface{} `export:"ExecUnmount"`
	Group                    string          `export:"Group"`
	IOScheduling             int32           `export:"IOScheduling"`
	IgnoreSIGPIPE            bool            `export:"IgnoreSIGPIPE"`
	InaccessibleDirectories  []string        `export:"InaccessibleDirectories"`
	KillMode                 string          `export:"KillMode"`
	KillSignal               int32           `export:"KillSignal"`
	LimitAS                  uint64          `export:"LimitAS"`
	LimitASSoft              uint64          `export:"LimitASSoft"`
	LimitCORE                uint64          `export:"LimitCORE"`
	LimitCORESoft            uint64          `export:"LimitCORESoft"`
	LimitCPU                 uint64          `export:"LimitCPU"`
	LimitCPUSoft             uint64          `export:"LimitCPUSoft"`
	LimitDATA                uint64          `export:"LimitDATA"`
	LimitDATASoft            uint64          `export:"LimitDATASoft"`
	LimitFSIZE               uint64          `export:"LimitFSIZE"`
	LimitFSIZESoft           uint64          `export:"LimitFSIZESoft"`
	LimitLOCKS               uint64          `export:"LimitLOCKS"`
	LimitLOCKSSoft           uint64          `export:"LimitLOCKSSoft"`
	LimitMEMLOCK             uint64          `export:"LimitMEMLOCK"`
	LimitMEMLOCKSoft         uint64          `export:"LimitMEMLOCKSoft"`
	LimitMSGQUEUE            uint64          `export:"LimitMSGQUEUE"`
	LimitMSGQUEUESoft        uint64          `export:"LimitMSGQUEUESoft"`
	LimitNICE                uint64          `export:"LimitNICE"`
	LimitNICESoft            uint64          `export:"LimitNICESoft"`
	LimitNOFILE              uint64          `export:"LimitNOFILE"`
	LimitNOFILESoft          uint64          `export:"LimitNOFILESoft"`
	LimitNPROC               uint64          `export:"LimitNPROC"`
	LimitNPROCSoft           uint64          `export:"LimitNPROCSoft"`
	LimitRSS                 uint64          `export:"LimitRSS"`
	LimitRSSSoft             uint64          `export:"LimitRSSSoft"`
	LimitRTPRIO              uint64          `export:"LimitRTPRIO"`
	LimitRTPRIOSoft          uint64          `export:"LimitRTPRIOSoft"`
	LimitRTTIME              uint64          `export:"LimitRTTIME"`
	LimitRTTIMESoft          uint64          `export:"LimitRTTIMESoft"`
	LimitSIGPENDING          uint64          `export:"LimitSIGPENDING"`
	LimitSIGPENDINGSoft      uint64          `export:"LimitSIGPENDINGSoft"`
	LimitSTACK               uint64          `export:"LimitSTACK"`
	LimitSTACKSoft           uint64          `export:"LimitSTACKSoft"`
	MemoryAccounting         bool            `export:"MemoryAccounting"`
	MemoryCurrent            uint64          `export:"MemoryCurrent"`
	MemoryLimit              uint64          `export:"MemoryLimit"`
	MountFlags               uint64          `export:"MountFlags"`
	Nice                     int32           `export:"Nice"`
	NoNewPrivileges          bool            `export:"NoNewPrivileges"`
	NonBlocking              bool            `export:"NonBlocking"`
	OOMScoreAdjust           int32           `export:"OOMScoreAdjust"`
	Options                  string          `export:"Options"`
	PAMName                  string          `export:"PAMName"`
	PassEnvironment          []string        `export:"PassEnvironment"`
	Personality              string          `export:"Personality"`
	PrivateDevices           bool            `export:"PrivateDevices"`
	PrivateNetwork           bool            `export:"PrivateNetwork"`
	PrivateTmp               bool            `export:"PrivateTmp"`
	ProtectHome              string          `export:"ProtectHome"`
	ProtectSystem            string          `export:"ProtectSystem"`
	ReadOnlyDirectories      []string        `export:"ReadOnlyDirectories"`
	ReadWriteDirectories     []string        `export:"ReadWriteDirectories"`
	RestrictAddressFamilies  []interface{}   `export:"RestrictAddressFamilies"`
	Result                   string          `export:"Result"`
	RootDirectory            string          `export:"RootDirectory"`
	RuntimeDirectory         []string        `export:"RuntimeDirectory"`
	RuntimeDirectoryMode     uint32          `export:"RuntimeDirectoryMode"`
	SELinuxContext           []interface{}   `export:"SELinuxContext"`
	SameProcessGroup         bool            `export:"SameProcessGroup"`
	SecureBits               int32           `export:"SecureBits"`
	SendSIGHUP               bool            `export:"SendSIGHUP"`
	SendSIGKILL              bool            `export:"SendSIGKILL"`
	Slice                    string          `export:"Slice"`
	SloppyOptions            bool            `export:"SloppyOptions"`
	SmackProcessLabel        []interface{}   `export:"SmackProcessLabel"`
	StandardError            string          `export:"StandardError"`
	StandardInput            string          `export:"StandardInput"`
	StandardOutput           string          `export:"StandardOutput"`
	StartupBlockIOWeight     uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares         uint64          `export:"StartupCPUShares"`
	SupplementaryGroups      []string        `export:"SupplementaryGroups"`
	SyslogFacility           int32           `export:"SyslogFacility"`
	SyslogIdentifier         string          `export:"SyslogIdentifier"`
	SyslogLevel              int32           `export:"SyslogLevel"`
	SyslogLevelPrefix        bool            `export:"SyslogLevelPrefix"`
	SyslogPriority           int32           `export:"SyslogPriority"`
	SystemCallArchitectures  []string        `export:"SystemCallArchitectures"`
	SystemCallErrorNumber    int32           `export:"SystemCallErrorNumber"`
	SystemCallFilter         []interface{}   `export:"SystemCallFilter"`
	TTYPath                  string          `export:"TTYPath"`
	TTYReset                 bool            `export:"TTYReset"`
	TTYVHangup               bool            `export:"TTYVHangup"`
	TTYVTDisallocate         bool            `export:"TTYVTDisallocate"`
	TasksAccounting          bool            `export:"TasksAccounting"`
	TasksCurrent             uint64          `export:"TasksCurrent"`
	TasksMax                 uint64          `export:"TasksMax"`
	TimeoutUSec              uint64          `export:"TimeoutUSec"`
	TimerSlackNSec           uint64          `export:"TimerSlackNSec"`
	Type                     string          `export:"Type"`
	UMask                    uint32          `export:"UMask"`
	User                     string          `export:"User"`
	UtmpIdentifier           string          `export:"UtmpIdentifier"`
	UtmpMode                 string          `export:"UtmpMode"`
	What                     string          `export:"What"`
	Where                    string          `export:"Where"`
	WorkingDirectory         string          `export:"WorkingDirectory"`
}

// newMountTypePropertiesFromMap generates a new MountTypeProperties given a systemd property map
func newMountTypePropertiesFromMap(m map[string]interface{}) *MountTypeProperties {
	s := &MountTypeProperties{}

	if val, ok := m["AmbientCapabilities"]; ok {
		s.AmbientCapabilities = val.(uint64)
	}

	if val, ok := m["AppArmorProfile"]; ok {
		s.AppArmorProfile = val.([]interface{})
	}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUAffinity"]; ok {
		s.CPUAffinity = val.([]uint8)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUSchedulingPolicy"]; ok {
		s.CPUSchedulingPolicy = val.(int32)
	}

	if val, ok := m["CPUSchedulingPriority"]; ok {
		s.CPUSchedulingPriority = val.(int32)
	}

	if val, ok := m["CPUSchedulingResetOnFork"]; ok {
		s.CPUSchedulingResetOnFork = val.(bool)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["Capabilities"]; ok {
		s.Capabilities = val.(string)
	}

	if val, ok := m["CapabilityBoundingSet"]; ok {
		s.CapabilityBoundingSet = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["ControlPID"]; ok {
		s.ControlPID = val.(uint32)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["DirectoryMode"]; ok {
		s.DirectoryMode = val.(uint32)
	}

	if val, ok := m["Environment"]; ok {
		s.Environment = val.([]string)
	}

	if val, ok := m["EnvironmentFiles"]; ok {
		s.EnvironmentFiles = val.([][]interface{})
	}

	if val, ok := m["ExecMount"]; ok {
		s.ExecMount = val.([][]interface{})
	}

	if val, ok := m["ExecRemount"]; ok {
		s.ExecRemount = val.([][]interface{})
	}

	if val, ok := m["ExecUnmount"]; ok {
		s.ExecUnmount = val.([][]interface{})
	}

	if val, ok := m["Group"]; ok {
		s.Group = val.(string)
	}

	if val, ok := m["IOScheduling"]; ok {
		s.IOScheduling = val.(int32)
	}

	if val, ok := m["IgnoreSIGPIPE"]; ok {
		s.IgnoreSIGPIPE = val.(bool)
	}

	if val, ok := m["InaccessibleDirectories"]; ok {
		s.InaccessibleDirectories = val.([]string)
	}

	if val, ok := m["KillMode"]; ok {
		s.KillMode = val.(string)
	}

	if val, ok := m["KillSignal"]; ok {
		s.KillSignal = val.(int32)
	}

	if val, ok := m["LimitAS"]; ok {
		s.LimitAS = val.(uint64)
	}

	if val, ok := m["LimitASSoft"]; ok {
		s.LimitASSoft = val.(uint64)
	}

	if val, ok := m["LimitCORE"]; ok {
		s.LimitCORE = val.(uint64)
	}

	if val, ok := m["LimitCORESoft"]; ok {
		s.LimitCORESoft = val.(uint64)
	}

	if val, ok := m["LimitCPU"]; ok {
		s.LimitCPU = val.(uint64)
	}

	if val, ok := m["LimitCPUSoft"]; ok {
		s.LimitCPUSoft = val.(uint64)
	}

	if val, ok := m["LimitDATA"]; ok {
		s.LimitDATA = val.(uint64)
	}

	if val, ok := m["LimitDATASoft"]; ok {
		s.LimitDATASoft = val.(uint64)
	}

	if val, ok := m["LimitFSIZE"]; ok {
		s.LimitFSIZE = val.(uint64)
	}

	if val, ok := m["LimitFSIZESoft"]; ok {
		s.LimitFSIZESoft = val.(uint64)
	}

	if val, ok := m["LimitLOCKS"]; ok {
		s.LimitLOCKS = val.(uint64)
	}

	if val, ok := m["LimitLOCKSSoft"]; ok {
		s.LimitLOCKSSoft = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCK"]; ok {
		s.LimitMEMLOCK = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCKSoft"]; ok {
		s.LimitMEMLOCKSoft = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUE"]; ok {
		s.LimitMSGQUEUE = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUESoft"]; ok {
		s.LimitMSGQUEUESoft = val.(uint64)
	}

	if val, ok := m["LimitNICE"]; ok {
		s.LimitNICE = val.(uint64)
	}

	if val, ok := m["LimitNICESoft"]; ok {
		s.LimitNICESoft = val.(uint64)
	}

	if val, ok := m["LimitNOFILE"]; ok {
		s.LimitNOFILE = val.(uint64)
	}

	if val, ok := m["LimitNOFILESoft"]; ok {
		s.LimitNOFILESoft = val.(uint64)
	}

	if val, ok := m["LimitNPROC"]; ok {
		s.LimitNPROC = val.(uint64)
	}

	if val, ok := m["LimitNPROCSoft"]; ok {
		s.LimitNPROCSoft = val.(uint64)
	}

	if val, ok := m["LimitRSS"]; ok {
		s.LimitRSS = val.(uint64)
	}

	if val, ok := m["LimitRSSSoft"]; ok {
		s.LimitRSSSoft = val.(uint64)
	}

	if val, ok := m["LimitRTPRIO"]; ok {
		s.LimitRTPRIO = val.(uint64)
	}

	if val, ok := m["LimitRTPRIOSoft"]; ok {
		s.LimitRTPRIOSoft = val.(uint64)
	}

	if val, ok := m["LimitRTTIME"]; ok {
		s.LimitRTTIME = val.(uint64)
	}

	if val, ok := m["LimitRTTIMESoft"]; ok {
		s.LimitRTTIMESoft = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDING"]; ok {
		s.LimitSIGPENDING = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDINGSoft"]; ok {
		s.LimitSIGPENDINGSoft = val.(uint64)
	}

	if val, ok := m["LimitSTACK"]; ok {
		s.LimitSTACK = val.(uint64)
	}

	if val, ok := m["LimitSTACKSoft"]; ok {
		s.LimitSTACKSoft = val.(uint64)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["MountFlags"]; ok {
		s.MountFlags = val.(uint64)
	}

	if val, ok := m["Nice"]; ok {
		s.Nice = val.(int32)
	}

	if val, ok := m["NoNewPrivileges"]; ok {
		s.NoNewPrivileges = val.(bool)
	}

	if val, ok := m["NonBlocking"]; ok {
		s.NonBlocking = val.(bool)
	}

	if val, ok := m["OOMScoreAdjust"]; ok {
		s.OOMScoreAdjust = val.(int32)
	}

	if val, ok := m["Options"]; ok {
		s.Options = val.(string)
	}

	if val, ok := m["PAMName"]; ok {
		s.PAMName = val.(string)
	}

	if val, ok := m["PassEnvironment"]; ok {
		s.PassEnvironment = val.([]string)
	}

	if val, ok := m["Personality"]; ok {
		s.Personality = val.(string)
	}

	if val, ok := m["PrivateDevices"]; ok {
		s.PrivateDevices = val.(bool)
	}

	if val, ok := m["PrivateNetwork"]; ok {
		s.PrivateNetwork = val.(bool)
	}

	if val, ok := m["PrivateTmp"]; ok {
		s.PrivateTmp = val.(bool)
	}

	if val, ok := m["ProtectHome"]; ok {
		s.ProtectHome = val.(string)
	}

	if val, ok := m["ProtectSystem"]; ok {
		s.ProtectSystem = val.(string)
	}

	if val, ok := m["ReadOnlyDirectories"]; ok {
		s.ReadOnlyDirectories = val.([]string)
	}

	if val, ok := m["ReadWriteDirectories"]; ok {
		s.ReadWriteDirectories = val.([]string)
	}

	if val, ok := m["RestrictAddressFamilies"]; ok {
		s.RestrictAddressFamilies = val.([]interface{})
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["RootDirectory"]; ok {
		s.RootDirectory = val.(string)
	}

	if val, ok := m["RuntimeDirectory"]; ok {
		s.RuntimeDirectory = val.([]string)
	}

	if val, ok := m["RuntimeDirectoryMode"]; ok {
		s.RuntimeDirectoryMode = val.(uint32)
	}

	if val, ok := m["SELinuxContext"]; ok {
		s.SELinuxContext = val.([]interface{})
	}

	if val, ok := m["SameProcessGroup"]; ok {
		s.SameProcessGroup = val.(bool)
	}

	if val, ok := m["SecureBits"]; ok {
		s.SecureBits = val.(int32)
	}

	if val, ok := m["SendSIGHUP"]; ok {
		s.SendSIGHUP = val.(bool)
	}

	if val, ok := m["SendSIGKILL"]; ok {
		s.SendSIGKILL = val.(bool)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["SloppyOptions"]; ok {
		s.SloppyOptions = val.(bool)
	}

	if val, ok := m["SmackProcessLabel"]; ok {
		s.SmackProcessLabel = val.([]interface{})
	}

	if val, ok := m["StandardError"]; ok {
		s.StandardError = val.(string)
	}

	if val, ok := m["StandardInput"]; ok {
		s.StandardInput = val.(string)
	}

	if val, ok := m["StandardOutput"]; ok {
		s.StandardOutput = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["SupplementaryGroups"]; ok {
		s.SupplementaryGroups = val.([]string)
	}

	if val, ok := m["SyslogFacility"]; ok {
		s.SyslogFacility = val.(int32)
	}

	if val, ok := m["SyslogIdentifier"]; ok {
		s.SyslogIdentifier = val.(string)
	}

	if val, ok := m["SyslogLevel"]; ok {
		s.SyslogLevel = val.(int32)
	}

	if val, ok := m["SyslogLevelPrefix"]; ok {
		s.SyslogLevelPrefix = val.(bool)
	}

	if val, ok := m["SyslogPriority"]; ok {
		s.SyslogPriority = val.(int32)
	}

	if val, ok := m["SystemCallArchitectures"]; ok {
		s.SystemCallArchitectures = val.([]string)
	}

	if val, ok := m["SystemCallErrorNumber"]; ok {
		s.SystemCallErrorNumber = val.(int32)
	}

	if val, ok := m["SystemCallFilter"]; ok {
		s.SystemCallFilter = val.([]interface{})
	}

	if val, ok := m["TTYPath"]; ok {
		s.TTYPath = val.(string)
	}

	if val, ok := m["TTYReset"]; ok {
		s.TTYReset = val.(bool)
	}

	if val, ok := m["TTYVHangup"]; ok {
		s.TTYVHangup = val.(bool)
	}

	if val, ok := m["TTYVTDisallocate"]; ok {
		s.TTYVTDisallocate = val.(bool)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}

	if val, ok := m["TimeoutUSec"]; ok {
		s.TimeoutUSec = val.(uint64)
	}

	if val, ok := m["TimerSlackNSec"]; ok {
		s.TimerSlackNSec = val.(uint64)
	}

	if val, ok := m["Type"]; ok {
		s.Type = val.(string)
	}

	if val, ok := m["UMask"]; ok {
		s.UMask = val.(uint32)
	}

	if val, ok := m["User"]; ok {
		s.User = val.(string)
	}

	if val, ok := m["UtmpIdentifier"]; ok {
		s.UtmpIdentifier = val.(string)
	}

	if val, ok := m["UtmpMode"]; ok {
		s.UtmpMode = val.(string)
	}

	if val, ok := m["What"]; ok {
		s.What = val.(string)
	}

	if val, ok := m["Where"]; ok {
		s.Where = val.(string)
	}

	if val, ok := m["WorkingDirectory"]; ok {
		s.WorkingDirectory = val.(string)
	}
	return s
}

// AutomountTypeProperties wraps the dbus api for system with properties from this unit type
type AutomountTypeProperties struct {
	DirectoryMode   uint32 `export:"DirectoryMode"`
	Result          string `export:"Result"`
	TimeoutIdleUSec uint64 `export:"TimeoutIdleUSec"`
	Where           string `export:"Where"`
}

// newAutomountTypePropertiesFromMap generates a new AutomountTypeProperties given a systemd property map
func newAutomountTypePropertiesFromMap(m map[string]interface{}) *AutomountTypeProperties {
	s := &AutomountTypeProperties{}

	if val, ok := m["DirectoryMode"]; ok {
		s.DirectoryMode = val.(uint32)
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["TimeoutIdleUSec"]; ok {
		s.TimeoutIdleUSec = val.(uint64)
	}

	if val, ok := m["Where"]; ok {
		s.Where = val.(string)
	}
	return s
}

// SwapTypeProperties wraps the dbus api for system with properties from this unit type
type SwapTypeProperties struct {
	AmbientCapabilities      uint64          `export:"AmbientCapabilities"`
	AppArmorProfile          []interface{}   `export:"AppArmorProfile"`
	BlockIOAccounting        bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight      [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth     [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight            uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth    [][]interface{} `export:"BlockIOWriteBandwidth"`
	CPUAccounting            bool            `export:"CPUAccounting"`
	CPUAffinity              []uint8         `export:"CPUAffinity"`
	CPUQuotaPerSecUSec       uint64          `export:"CPUQuotaPerSecUSec"`
	CPUSchedulingPolicy      int32           `export:"CPUSchedulingPolicy"`
	CPUSchedulingPriority    int32           `export:"CPUSchedulingPriority"`
	CPUSchedulingResetOnFork bool            `export:"CPUSchedulingResetOnFork"`
	CPUShares                uint64          `export:"CPUShares"`
	CPUUsageNSec             uint64          `export:"CPUUsageNSec"`
	Capabilities             string          `export:"Capabilities"`
	CapabilityBoundingSet    uint64          `export:"CapabilityBoundingSet"`
	ControlGroup             string          `export:"ControlGroup"`
	ControlPID               uint32          `export:"ControlPID"`
	Delegate                 bool            `export:"Delegate"`
	DeviceAllow              [][]interface{} `export:"DeviceAllow"`
	DevicePolicy             string          `export:"DevicePolicy"`
	Environment              []string        `export:"Environment"`
	EnvironmentFiles         [][]interface{} `export:"EnvironmentFiles"`
	ExecActivate             [][]interface{} `export:"ExecActivate"`
	ExecDeactivate           [][]interface{} `export:"ExecDeactivate"`
	Group                    string          `export:"Group"`
	IOScheduling             int32           `export:"IOScheduling"`
	IgnoreSIGPIPE            bool            `export:"IgnoreSIGPIPE"`
	InaccessibleDirectories  []string        `export:"InaccessibleDirectories"`
	KillMode                 string          `export:"KillMode"`
	KillSignal               int32           `export:"KillSignal"`
	LimitAS                  uint64          `export:"LimitAS"`
	LimitASSoft              uint64          `export:"LimitASSoft"`
	LimitCORE                uint64          `export:"LimitCORE"`
	LimitCORESoft            uint64          `export:"LimitCORESoft"`
	LimitCPU                 uint64          `export:"LimitCPU"`
	LimitCPUSoft             uint64          `export:"LimitCPUSoft"`
	LimitDATA                uint64          `export:"LimitDATA"`
	LimitDATASoft            uint64          `export:"LimitDATASoft"`
	LimitFSIZE               uint64          `export:"LimitFSIZE"`
	LimitFSIZESoft           uint64          `export:"LimitFSIZESoft"`
	LimitLOCKS               uint64          `export:"LimitLOCKS"`
	LimitLOCKSSoft           uint64          `export:"LimitLOCKSSoft"`
	LimitMEMLOCK             uint64          `export:"LimitMEMLOCK"`
	LimitMEMLOCKSoft         uint64          `export:"LimitMEMLOCKSoft"`
	LimitMSGQUEUE            uint64          `export:"LimitMSGQUEUE"`
	LimitMSGQUEUESoft        uint64          `export:"LimitMSGQUEUESoft"`
	LimitNICE                uint64          `export:"LimitNICE"`
	LimitNICESoft            uint64          `export:"LimitNICESoft"`
	LimitNOFILE              uint64          `export:"LimitNOFILE"`
	LimitNOFILESoft          uint64          `export:"LimitNOFILESoft"`
	LimitNPROC               uint64          `export:"LimitNPROC"`
	LimitNPROCSoft           uint64          `export:"LimitNPROCSoft"`
	LimitRSS                 uint64          `export:"LimitRSS"`
	LimitRSSSoft             uint64          `export:"LimitRSSSoft"`
	LimitRTPRIO              uint64          `export:"LimitRTPRIO"`
	LimitRTPRIOSoft          uint64          `export:"LimitRTPRIOSoft"`
	LimitRTTIME              uint64          `export:"LimitRTTIME"`
	LimitRTTIMESoft          uint64          `export:"LimitRTTIMESoft"`
	LimitSIGPENDING          uint64          `export:"LimitSIGPENDING"`
	LimitSIGPENDINGSoft      uint64          `export:"LimitSIGPENDINGSoft"`
	LimitSTACK               uint64          `export:"LimitSTACK"`
	LimitSTACKSoft           uint64          `export:"LimitSTACKSoft"`
	MemoryAccounting         bool            `export:"MemoryAccounting"`
	MemoryCurrent            uint64          `export:"MemoryCurrent"`
	MemoryLimit              uint64          `export:"MemoryLimit"`
	MountFlags               uint64          `export:"MountFlags"`
	Nice                     int32           `export:"Nice"`
	NoNewPrivileges          bool            `export:"NoNewPrivileges"`
	NonBlocking              bool            `export:"NonBlocking"`
	OOMScoreAdjust           int32           `export:"OOMScoreAdjust"`
	Options                  string          `export:"Options"`
	PAMName                  string          `export:"PAMName"`
	PassEnvironment          []string        `export:"PassEnvironment"`
	Personality              string          `export:"Personality"`
	Priority                 int32           `export:"Priority"`
	PrivateDevices           bool            `export:"PrivateDevices"`
	PrivateNetwork           bool            `export:"PrivateNetwork"`
	PrivateTmp               bool            `export:"PrivateTmp"`
	ProtectHome              string          `export:"ProtectHome"`
	ProtectSystem            string          `export:"ProtectSystem"`
	ReadOnlyDirectories      []string        `export:"ReadOnlyDirectories"`
	ReadWriteDirectories     []string        `export:"ReadWriteDirectories"`
	RestrictAddressFamilies  []interface{}   `export:"RestrictAddressFamilies"`
	Result                   string          `export:"Result"`
	RootDirectory            string          `export:"RootDirectory"`
	RuntimeDirectory         []string        `export:"RuntimeDirectory"`
	RuntimeDirectoryMode     uint32          `export:"RuntimeDirectoryMode"`
	SELinuxContext           []interface{}   `export:"SELinuxContext"`
	SameProcessGroup         bool            `export:"SameProcessGroup"`
	SecureBits               int32           `export:"SecureBits"`
	SendSIGHUP               bool            `export:"SendSIGHUP"`
	SendSIGKILL              bool            `export:"SendSIGKILL"`
	Slice                    string          `export:"Slice"`
	SmackProcessLabel        []interface{}   `export:"SmackProcessLabel"`
	StandardError            string          `export:"StandardError"`
	StandardInput            string          `export:"StandardInput"`
	StandardOutput           string          `export:"StandardOutput"`
	StartupBlockIOWeight     uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares         uint64          `export:"StartupCPUShares"`
	SupplementaryGroups      []string        `export:"SupplementaryGroups"`
	SyslogFacility           int32           `export:"SyslogFacility"`
	SyslogIdentifier         string          `export:"SyslogIdentifier"`
	SyslogLevel              int32           `export:"SyslogLevel"`
	SyslogLevelPrefix        bool            `export:"SyslogLevelPrefix"`
	SyslogPriority           int32           `export:"SyslogPriority"`
	SystemCallArchitectures  []string        `export:"SystemCallArchitectures"`
	SystemCallErrorNumber    int32           `export:"SystemCallErrorNumber"`
	SystemCallFilter         []interface{}   `export:"SystemCallFilter"`
	TTYPath                  string          `export:"TTYPath"`
	TTYReset                 bool            `export:"TTYReset"`
	TTYVHangup               bool            `export:"TTYVHangup"`
	TTYVTDisallocate         bool            `export:"TTYVTDisallocate"`
	TasksAccounting          bool            `export:"TasksAccounting"`
	TasksCurrent             uint64          `export:"TasksCurrent"`
	TasksMax                 uint64          `export:"TasksMax"`
	TimeoutUSec              uint64          `export:"TimeoutUSec"`
	TimerSlackNSec           uint64          `export:"TimerSlackNSec"`
	UMask                    uint32          `export:"UMask"`
	User                     string          `export:"User"`
	UtmpIdentifier           string          `export:"UtmpIdentifier"`
	UtmpMode                 string          `export:"UtmpMode"`
	What                     string          `export:"What"`
	WorkingDirectory         string          `export:"WorkingDirectory"`
}

// newSwapTypePropertiesFromMap generates a new SwapTypeProperties given a systemd property map
func newSwapTypePropertiesFromMap(m map[string]interface{}) *SwapTypeProperties {
	s := &SwapTypeProperties{}

	if val, ok := m["AmbientCapabilities"]; ok {
		s.AmbientCapabilities = val.(uint64)
	}

	if val, ok := m["AppArmorProfile"]; ok {
		s.AppArmorProfile = val.([]interface{})
	}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUAffinity"]; ok {
		s.CPUAffinity = val.([]uint8)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUSchedulingPolicy"]; ok {
		s.CPUSchedulingPolicy = val.(int32)
	}

	if val, ok := m["CPUSchedulingPriority"]; ok {
		s.CPUSchedulingPriority = val.(int32)
	}

	if val, ok := m["CPUSchedulingResetOnFork"]; ok {
		s.CPUSchedulingResetOnFork = val.(bool)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["Capabilities"]; ok {
		s.Capabilities = val.(string)
	}

	if val, ok := m["CapabilityBoundingSet"]; ok {
		s.CapabilityBoundingSet = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["ControlPID"]; ok {
		s.ControlPID = val.(uint32)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["Environment"]; ok {
		s.Environment = val.([]string)
	}

	if val, ok := m["EnvironmentFiles"]; ok {
		s.EnvironmentFiles = val.([][]interface{})
	}

	if val, ok := m["ExecActivate"]; ok {
		s.ExecActivate = val.([][]interface{})
	}

	if val, ok := m["ExecDeactivate"]; ok {
		s.ExecDeactivate = val.([][]interface{})
	}

	if val, ok := m["Group"]; ok {
		s.Group = val.(string)
	}

	if val, ok := m["IOScheduling"]; ok {
		s.IOScheduling = val.(int32)
	}

	if val, ok := m["IgnoreSIGPIPE"]; ok {
		s.IgnoreSIGPIPE = val.(bool)
	}

	if val, ok := m["InaccessibleDirectories"]; ok {
		s.InaccessibleDirectories = val.([]string)
	}

	if val, ok := m["KillMode"]; ok {
		s.KillMode = val.(string)
	}

	if val, ok := m["KillSignal"]; ok {
		s.KillSignal = val.(int32)
	}

	if val, ok := m["LimitAS"]; ok {
		s.LimitAS = val.(uint64)
	}

	if val, ok := m["LimitASSoft"]; ok {
		s.LimitASSoft = val.(uint64)
	}

	if val, ok := m["LimitCORE"]; ok {
		s.LimitCORE = val.(uint64)
	}

	if val, ok := m["LimitCORESoft"]; ok {
		s.LimitCORESoft = val.(uint64)
	}

	if val, ok := m["LimitCPU"]; ok {
		s.LimitCPU = val.(uint64)
	}

	if val, ok := m["LimitCPUSoft"]; ok {
		s.LimitCPUSoft = val.(uint64)
	}

	if val, ok := m["LimitDATA"]; ok {
		s.LimitDATA = val.(uint64)
	}

	if val, ok := m["LimitDATASoft"]; ok {
		s.LimitDATASoft = val.(uint64)
	}

	if val, ok := m["LimitFSIZE"]; ok {
		s.LimitFSIZE = val.(uint64)
	}

	if val, ok := m["LimitFSIZESoft"]; ok {
		s.LimitFSIZESoft = val.(uint64)
	}

	if val, ok := m["LimitLOCKS"]; ok {
		s.LimitLOCKS = val.(uint64)
	}

	if val, ok := m["LimitLOCKSSoft"]; ok {
		s.LimitLOCKSSoft = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCK"]; ok {
		s.LimitMEMLOCK = val.(uint64)
	}

	if val, ok := m["LimitMEMLOCKSoft"]; ok {
		s.LimitMEMLOCKSoft = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUE"]; ok {
		s.LimitMSGQUEUE = val.(uint64)
	}

	if val, ok := m["LimitMSGQUEUESoft"]; ok {
		s.LimitMSGQUEUESoft = val.(uint64)
	}

	if val, ok := m["LimitNICE"]; ok {
		s.LimitNICE = val.(uint64)
	}

	if val, ok := m["LimitNICESoft"]; ok {
		s.LimitNICESoft = val.(uint64)
	}

	if val, ok := m["LimitNOFILE"]; ok {
		s.LimitNOFILE = val.(uint64)
	}

	if val, ok := m["LimitNOFILESoft"]; ok {
		s.LimitNOFILESoft = val.(uint64)
	}

	if val, ok := m["LimitNPROC"]; ok {
		s.LimitNPROC = val.(uint64)
	}

	if val, ok := m["LimitNPROCSoft"]; ok {
		s.LimitNPROCSoft = val.(uint64)
	}

	if val, ok := m["LimitRSS"]; ok {
		s.LimitRSS = val.(uint64)
	}

	if val, ok := m["LimitRSSSoft"]; ok {
		s.LimitRSSSoft = val.(uint64)
	}

	if val, ok := m["LimitRTPRIO"]; ok {
		s.LimitRTPRIO = val.(uint64)
	}

	if val, ok := m["LimitRTPRIOSoft"]; ok {
		s.LimitRTPRIOSoft = val.(uint64)
	}

	if val, ok := m["LimitRTTIME"]; ok {
		s.LimitRTTIME = val.(uint64)
	}

	if val, ok := m["LimitRTTIMESoft"]; ok {
		s.LimitRTTIMESoft = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDING"]; ok {
		s.LimitSIGPENDING = val.(uint64)
	}

	if val, ok := m["LimitSIGPENDINGSoft"]; ok {
		s.LimitSIGPENDINGSoft = val.(uint64)
	}

	if val, ok := m["LimitSTACK"]; ok {
		s.LimitSTACK = val.(uint64)
	}

	if val, ok := m["LimitSTACKSoft"]; ok {
		s.LimitSTACKSoft = val.(uint64)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["MountFlags"]; ok {
		s.MountFlags = val.(uint64)
	}

	if val, ok := m["Nice"]; ok {
		s.Nice = val.(int32)
	}

	if val, ok := m["NoNewPrivileges"]; ok {
		s.NoNewPrivileges = val.(bool)
	}

	if val, ok := m["NonBlocking"]; ok {
		s.NonBlocking = val.(bool)
	}

	if val, ok := m["OOMScoreAdjust"]; ok {
		s.OOMScoreAdjust = val.(int32)
	}

	if val, ok := m["Options"]; ok {
		s.Options = val.(string)
	}

	if val, ok := m["PAMName"]; ok {
		s.PAMName = val.(string)
	}

	if val, ok := m["PassEnvironment"]; ok {
		s.PassEnvironment = val.([]string)
	}

	if val, ok := m["Personality"]; ok {
		s.Personality = val.(string)
	}

	if val, ok := m["Priority"]; ok {
		s.Priority = val.(int32)
	}

	if val, ok := m["PrivateDevices"]; ok {
		s.PrivateDevices = val.(bool)
	}

	if val, ok := m["PrivateNetwork"]; ok {
		s.PrivateNetwork = val.(bool)
	}

	if val, ok := m["PrivateTmp"]; ok {
		s.PrivateTmp = val.(bool)
	}

	if val, ok := m["ProtectHome"]; ok {
		s.ProtectHome = val.(string)
	}

	if val, ok := m["ProtectSystem"]; ok {
		s.ProtectSystem = val.(string)
	}

	if val, ok := m["ReadOnlyDirectories"]; ok {
		s.ReadOnlyDirectories = val.([]string)
	}

	if val, ok := m["ReadWriteDirectories"]; ok {
		s.ReadWriteDirectories = val.([]string)
	}

	if val, ok := m["RestrictAddressFamilies"]; ok {
		s.RestrictAddressFamilies = val.([]interface{})
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["RootDirectory"]; ok {
		s.RootDirectory = val.(string)
	}

	if val, ok := m["RuntimeDirectory"]; ok {
		s.RuntimeDirectory = val.([]string)
	}

	if val, ok := m["RuntimeDirectoryMode"]; ok {
		s.RuntimeDirectoryMode = val.(uint32)
	}

	if val, ok := m["SELinuxContext"]; ok {
		s.SELinuxContext = val.([]interface{})
	}

	if val, ok := m["SameProcessGroup"]; ok {
		s.SameProcessGroup = val.(bool)
	}

	if val, ok := m["SecureBits"]; ok {
		s.SecureBits = val.(int32)
	}

	if val, ok := m["SendSIGHUP"]; ok {
		s.SendSIGHUP = val.(bool)
	}

	if val, ok := m["SendSIGKILL"]; ok {
		s.SendSIGKILL = val.(bool)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["SmackProcessLabel"]; ok {
		s.SmackProcessLabel = val.([]interface{})
	}

	if val, ok := m["StandardError"]; ok {
		s.StandardError = val.(string)
	}

	if val, ok := m["StandardInput"]; ok {
		s.StandardInput = val.(string)
	}

	if val, ok := m["StandardOutput"]; ok {
		s.StandardOutput = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["SupplementaryGroups"]; ok {
		s.SupplementaryGroups = val.([]string)
	}

	if val, ok := m["SyslogFacility"]; ok {
		s.SyslogFacility = val.(int32)
	}

	if val, ok := m["SyslogIdentifier"]; ok {
		s.SyslogIdentifier = val.(string)
	}

	if val, ok := m["SyslogLevel"]; ok {
		s.SyslogLevel = val.(int32)
	}

	if val, ok := m["SyslogLevelPrefix"]; ok {
		s.SyslogLevelPrefix = val.(bool)
	}

	if val, ok := m["SyslogPriority"]; ok {
		s.SyslogPriority = val.(int32)
	}

	if val, ok := m["SystemCallArchitectures"]; ok {
		s.SystemCallArchitectures = val.([]string)
	}

	if val, ok := m["SystemCallErrorNumber"]; ok {
		s.SystemCallErrorNumber = val.(int32)
	}

	if val, ok := m["SystemCallFilter"]; ok {
		s.SystemCallFilter = val.([]interface{})
	}

	if val, ok := m["TTYPath"]; ok {
		s.TTYPath = val.(string)
	}

	if val, ok := m["TTYReset"]; ok {
		s.TTYReset = val.(bool)
	}

	if val, ok := m["TTYVHangup"]; ok {
		s.TTYVHangup = val.(bool)
	}

	if val, ok := m["TTYVTDisallocate"]; ok {
		s.TTYVTDisallocate = val.(bool)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}

	if val, ok := m["TimeoutUSec"]; ok {
		s.TimeoutUSec = val.(uint64)
	}

	if val, ok := m["TimerSlackNSec"]; ok {
		s.TimerSlackNSec = val.(uint64)
	}

	if val, ok := m["UMask"]; ok {
		s.UMask = val.(uint32)
	}

	if val, ok := m["User"]; ok {
		s.User = val.(string)
	}

	if val, ok := m["UtmpIdentifier"]; ok {
		s.UtmpIdentifier = val.(string)
	}

	if val, ok := m["UtmpMode"]; ok {
		s.UtmpMode = val.(string)
	}

	if val, ok := m["What"]; ok {
		s.What = val.(string)
	}

	if val, ok := m["WorkingDirectory"]; ok {
		s.WorkingDirectory = val.(string)
	}
	return s
}

// TargetTypeProperties wraps the dbus api for system with properties from this unit type
type TargetTypeProperties struct {
}

// newTargetTypePropertiesFromMap generates a new TargetTypeProperties given a systemd property map
func newTargetTypePropertiesFromMap(m map[string]interface{}) *TargetTypeProperties {
	s := &TargetTypeProperties{}
	return s
}

// PathTypeProperties wraps the dbus api for system with properties from this unit type
type PathTypeProperties struct {
	DirectoryMode uint32          `export:"DirectoryMode"`
	MakeDirectory bool            `export:"MakeDirectory"`
	Paths         [][]interface{} `export:"Paths"`
	Result        string          `export:"Result"`
	Unit          string          `export:"Unit"`
}

// newPathTypePropertiesFromMap generates a new PathTypeProperties given a systemd property map
func newPathTypePropertiesFromMap(m map[string]interface{}) *PathTypeProperties {
	s := &PathTypeProperties{}

	if val, ok := m["DirectoryMode"]; ok {
		s.DirectoryMode = val.(uint32)
	}

	if val, ok := m["MakeDirectory"]; ok {
		s.MakeDirectory = val.(bool)
	}

	if val, ok := m["Paths"]; ok {
		s.Paths = val.([][]interface{})
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["Unit"]; ok {
		s.Unit = val.(string)
	}
	return s
}

// TimerTypeProperties wraps the dbus api for system with properties from this unit type
type TimerTypeProperties struct {
	AccuracyUSec             uint64          `export:"AccuracyUSec"`
	LastTriggerUSec          uint64          `export:"LastTriggerUSec"`
	LastTriggerUSecMonotonic uint64          `export:"LastTriggerUSecMonotonic"`
	NextElapseUSecMonotonic  uint64          `export:"NextElapseUSecMonotonic"`
	NextElapseUSecRealtime   uint64          `export:"NextElapseUSecRealtime"`
	Persistent               bool            `export:"Persistent"`
	RandomizedDelayUSec      uint64          `export:"RandomizedDelayUSec"`
	RemainAfterElapse        bool            `export:"RemainAfterElapse"`
	Result                   string          `export:"Result"`
	TimersCalendar           [][]interface{} `export:"TimersCalendar"`
	TimersMonotonic          [][]interface{} `export:"TimersMonotonic"`
	Unit                     string          `export:"Unit"`
	WakeSystem               bool            `export:"WakeSystem"`
}

// newTimerTypePropertiesFromMap generates a new TimerTypeProperties given a systemd property map
func newTimerTypePropertiesFromMap(m map[string]interface{}) *TimerTypeProperties {
	s := &TimerTypeProperties{}

	if val, ok := m["AccuracyUSec"]; ok {
		s.AccuracyUSec = val.(uint64)
	}

	if val, ok := m["LastTriggerUSec"]; ok {
		s.LastTriggerUSec = val.(uint64)
	}

	if val, ok := m["LastTriggerUSecMonotonic"]; ok {
		s.LastTriggerUSecMonotonic = val.(uint64)
	}

	if val, ok := m["NextElapseUSecMonotonic"]; ok {
		s.NextElapseUSecMonotonic = val.(uint64)
	}

	if val, ok := m["NextElapseUSecRealtime"]; ok {
		s.NextElapseUSecRealtime = val.(uint64)
	}

	if val, ok := m["Persistent"]; ok {
		s.Persistent = val.(bool)
	}

	if val, ok := m["RandomizedDelayUSec"]; ok {
		s.RandomizedDelayUSec = val.(uint64)
	}

	if val, ok := m["RemainAfterElapse"]; ok {
		s.RemainAfterElapse = val.(bool)
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["TimersCalendar"]; ok {
		s.TimersCalendar = val.([][]interface{})
	}

	if val, ok := m["TimersMonotonic"]; ok {
		s.TimersMonotonic = val.([][]interface{})
	}

	if val, ok := m["Unit"]; ok {
		s.Unit = val.(string)
	}

	if val, ok := m["WakeSystem"]; ok {
		s.WakeSystem = val.(bool)
	}
	return s
}

// SliceTypeProperties wraps the dbus api for system with properties from this unit type
type SliceTypeProperties struct {
	BlockIOAccounting     bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight   [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth  [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight         uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth [][]interface{} `export:"BlockIOWriteBandwidth"`
	CPUAccounting         bool            `export:"CPUAccounting"`
	CPUQuotaPerSecUSec    uint64          `export:"CPUQuotaPerSecUSec"`
	CPUShares             uint64          `export:"CPUShares"`
	CPUUsageNSec          uint64          `export:"CPUUsageNSec"`
	ControlGroup          string          `export:"ControlGroup"`
	Delegate              bool            `export:"Delegate"`
	DeviceAllow           [][]interface{} `export:"DeviceAllow"`
	DevicePolicy          string          `export:"DevicePolicy"`
	MemoryAccounting      bool            `export:"MemoryAccounting"`
	MemoryCurrent         uint64          `export:"MemoryCurrent"`
	MemoryLimit           uint64          `export:"MemoryLimit"`
	Slice                 string          `export:"Slice"`
	StartupBlockIOWeight  uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares      uint64          `export:"StartupCPUShares"`
	TasksAccounting       bool            `export:"TasksAccounting"`
	TasksCurrent          uint64          `export:"TasksCurrent"`
	TasksMax              uint64          `export:"TasksMax"`
}

// newSliceTypePropertiesFromMap generates a new SliceTypeProperties given a systemd property map
func newSliceTypePropertiesFromMap(m map[string]interface{}) *SliceTypeProperties {
	s := &SliceTypeProperties{}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}
	return s
}

// ScopeTypeProperties wraps the dbus api for system with properties from this unit type
type ScopeTypeProperties struct {
	BlockIOAccounting     bool            `export:"BlockIOAccounting"`
	BlockIODeviceWeight   [][]interface{} `export:"BlockIODeviceWeight"`
	BlockIOReadBandwidth  [][]interface{} `export:"BlockIOReadBandwidth"`
	BlockIOWeight         uint64          `export:"BlockIOWeight"`
	BlockIOWriteBandwidth [][]interface{} `export:"BlockIOWriteBandwidth"`
	CPUAccounting         bool            `export:"CPUAccounting"`
	CPUQuotaPerSecUSec    uint64          `export:"CPUQuotaPerSecUSec"`
	CPUShares             uint64          `export:"CPUShares"`
	CPUUsageNSec          uint64          `export:"CPUUsageNSec"`
	ControlGroup          string          `export:"ControlGroup"`
	Controller            string          `export:"Controller"`
	Delegate              bool            `export:"Delegate"`
	DeviceAllow           [][]interface{} `export:"DeviceAllow"`
	DevicePolicy          string          `export:"DevicePolicy"`
	KillMode              string          `export:"KillMode"`
	KillSignal            int32           `export:"KillSignal"`
	MemoryAccounting      bool            `export:"MemoryAccounting"`
	MemoryCurrent         uint64          `export:"MemoryCurrent"`
	MemoryLimit           uint64          `export:"MemoryLimit"`
	Result                string          `export:"Result"`
	SendSIGHUP            bool            `export:"SendSIGHUP"`
	SendSIGKILL           bool            `export:"SendSIGKILL"`
	Slice                 string          `export:"Slice"`
	StartupBlockIOWeight  uint64          `export:"StartupBlockIOWeight"`
	StartupCPUShares      uint64          `export:"StartupCPUShares"`
	TasksAccounting       bool            `export:"TasksAccounting"`
	TasksCurrent          uint64          `export:"TasksCurrent"`
	TasksMax              uint64          `export:"TasksMax"`
	TimeoutStopUSec       uint64          `export:"TimeoutStopUSec"`
}

// newScopeTypePropertiesFromMap generates a new ScopeTypeProperties given a systemd property map
func newScopeTypePropertiesFromMap(m map[string]interface{}) *ScopeTypeProperties {
	s := &ScopeTypeProperties{}

	if val, ok := m["BlockIOAccounting"]; ok {
		s.BlockIOAccounting = val.(bool)
	}

	if val, ok := m["BlockIODeviceWeight"]; ok {
		s.BlockIODeviceWeight = val.([][]interface{})
	}

	if val, ok := m["BlockIOReadBandwidth"]; ok {
		s.BlockIOReadBandwidth = val.([][]interface{})
	}

	if val, ok := m["BlockIOWeight"]; ok {
		s.BlockIOWeight = val.(uint64)
	}

	if val, ok := m["BlockIOWriteBandwidth"]; ok {
		s.BlockIOWriteBandwidth = val.([][]interface{})
	}

	if val, ok := m["CPUAccounting"]; ok {
		s.CPUAccounting = val.(bool)
	}

	if val, ok := m["CPUQuotaPerSecUSec"]; ok {
		s.CPUQuotaPerSecUSec = val.(uint64)
	}

	if val, ok := m["CPUShares"]; ok {
		s.CPUShares = val.(uint64)
	}

	if val, ok := m["CPUUsageNSec"]; ok {
		s.CPUUsageNSec = val.(uint64)
	}

	if val, ok := m["ControlGroup"]; ok {
		s.ControlGroup = val.(string)
	}

	if val, ok := m["Controller"]; ok {
		s.Controller = val.(string)
	}

	if val, ok := m["Delegate"]; ok {
		s.Delegate = val.(bool)
	}

	if val, ok := m["DeviceAllow"]; ok {
		s.DeviceAllow = val.([][]interface{})
	}

	if val, ok := m["DevicePolicy"]; ok {
		s.DevicePolicy = val.(string)
	}

	if val, ok := m["KillMode"]; ok {
		s.KillMode = val.(string)
	}

	if val, ok := m["KillSignal"]; ok {
		s.KillSignal = val.(int32)
	}

	if val, ok := m["MemoryAccounting"]; ok {
		s.MemoryAccounting = val.(bool)
	}

	if val, ok := m["MemoryCurrent"]; ok {
		s.MemoryCurrent = val.(uint64)
	}

	if val, ok := m["MemoryLimit"]; ok {
		s.MemoryLimit = val.(uint64)
	}

	if val, ok := m["Result"]; ok {
		s.Result = val.(string)
	}

	if val, ok := m["SendSIGHUP"]; ok {
		s.SendSIGHUP = val.(bool)
	}

	if val, ok := m["SendSIGKILL"]; ok {
		s.SendSIGKILL = val.(bool)
	}

	if val, ok := m["Slice"]; ok {
		s.Slice = val.(string)
	}

	if val, ok := m["StartupBlockIOWeight"]; ok {
		s.StartupBlockIOWeight = val.(uint64)
	}

	if val, ok := m["StartupCPUShares"]; ok {
		s.StartupCPUShares = val.(uint64)
	}

	if val, ok := m["TasksAccounting"]; ok {
		s.TasksAccounting = val.(bool)
	}

	if val, ok := m["TasksCurrent"]; ok {
		s.TasksCurrent = val.(uint64)
	}

	if val, ok := m["TasksMax"]; ok {
		s.TasksMax = val.(uint64)
	}

	if val, ok := m["TimeoutStopUSec"]; ok {
		s.TimeoutStopUSec = val.(uint64)
	}
	return s
}
