content: module Puppet.Language.NativeTypes.User (nativeUser) where
  
  import Puppet.Language.NativeTypes.Helpers
  
  nativeUser :: (NativeTypeName, NativeTypeMethods)
  nativeUser = ("user", nativetypemethods parameterfunctions return)
  
  -- Autorequires: If Puppet is managing the user or user that owns a file, the file resource will autorequire them.
  -- If Puppet is managing any parent directories of a file, the file resource will autorequire them.
  parameterfunctions :: [(Text, [Text -> NativeTypeValidate])]
  parameterfunctions =
    [ ("allowdupe", [string, defaultvalue "false", values ["true", "false"]]),
      ("attribute_membership", [string, defaultvalue "minimum", values ["inclusive", "minimum"]]),
      ("attributes", [rarray, strings]),
      ("auth_membership", [defaultvalue "minimum", string, values ["inclusive", "minimum"]]),
      ("auths", [rarray, strings]),
      ("comment", [string]),
      ("ensure", [defaultvalue "present", string, values ["present", "absent", "role"]]),
      ("expiry", [string]),
      ("gid", [string]),
      ("groups", [rarray, strings]),
      ("home", [string, fullyQualified, noTrailingSlash]),
      ("ia_load_module", [string]),
      ("iterations", [integer]),
      ("key_membership", [string, defaultvalue "minimum", values ["inclusive", "minimum"]]),
      ("keys", []),
      ("managehome", [string, defaultvalue "false", values ["true", "false"]]),
      ("membership", [string, defaultvalue "minimum", values ["inclusive", "minimum"]]),
      ("name", [nameval]),
      ("password", [string]),
      ("password_max_age", [integer]),
      ("password_min_age", [integer]),
      ("profile_membership", [string, defaultvalue "minimum", values ["inclusive", "minimum"]]),
      ("profiles", [rarray, strings]),
      ("project", [string]),
      ("provider", [string, values ["aix", "directoryservice", "hpuxuseradd", "useradd", "ldap", "pw", "user_role_add", "window_adsi"]]),
      ("role_membership", [string, defaultvalue "minimum", values ["inclusive", "minimum"]]),
      ("roles", [rarray, strings]),
      ("salt", [string]),
      ("shell", [string, fullyQualified, noTrailingSlash]),
      ("system", [string, defaultvalue "false", values ["true", "false"]]),
      ("uid", [integer])
    ]
  