content: -- | This exposed module holds the /native/ Puppet resource types.
  module Puppet.Language.NativeTypes
    ( baseNativeTypes,
      defaulttype,
      NativeTypeMethods,
      NativeTypeName,
      HasNativeTypeMethods (..),
    )
  where
  
  import qualified Data.HashMap.Strict as HM
  import Puppet.Language.NativeTypes.Concat (nativeConcat, nativeConcatFragment)
  import Puppet.Language.NativeTypes.Cron (nativeCron)
  import Puppet.Language.NativeTypes.Exec (nativeExec)
  import Puppet.Language.NativeTypes.File (nativeFile)
  import Puppet.Language.NativeTypes.Group (nativeGroup)
  import Puppet.Language.NativeTypes.Helpers
    ( Container,
      HasNativeTypeMethods (..),
      NativeTypeMethods,
      NativeTypeName,
      defaulttype,
      faketype,
      map,
      (++),
    )
  import Puppet.Language.NativeTypes.Host (nativeHost)
  import Puppet.Language.NativeTypes.Mount (nativeMount)
  import Puppet.Language.NativeTypes.Notify (nativeNotify)
  import Puppet.Language.NativeTypes.Package (nativePackage)
  import Puppet.Language.NativeTypes.SshSecure (nativeSshSecure)
  import Puppet.Language.NativeTypes.User (nativeUser)
  import Puppet.Language.NativeTypes.ZoneRecord (nativeZoneRecord)
  
  fakeTypes :: [(NativeTypeName, NativeTypeMethods)]
  fakeTypes = [faketype "class"]
  
  defaultTypes :: [(NativeTypeName, NativeTypeMethods)]
  defaultTypes = map defaulttype ["augeas", "computer", "filebucket", "interface", "k5login", "macauthorization", "mailalias", "maillist", "mcx", "nagios_command", "nagios_contact", "nagios_contactgroup", "nagios_host", "nagios_hostdependency", "nagios_hostescalation", "nagios_hostextinfo", "nagios_hostgroup", "nagios_service", "nagios_servicedependency", "nagios_serviceescalation", "nagios_serviceextinfo", "nagios_servicegroup", "nagios_timeperiod", "resources", "router", "schedule", "scheduledtask", "selboolean", "selmodule", "service", "ssh_authorized_key", "sshkey", "stage", "tidy", "vlan", "yumrepo", "zfs", "zone", "zpool"]
  
  -- | The map of native types.
  baseNativeTypes :: Container NativeTypeMethods
  baseNativeTypes =
    HM.fromList
      ( nativeConcat
          : nativeConcatFragment
          : nativeCron
          : nativeExec
          : nativeFile
          : nativeGroup
          : nativeHost
          : nativeMount
          : nativeNotify
          : nativePackage
          : nativeSshSecure
          : nativeUser
          : nativeZoneRecord
          : fakeTypes
          ++ defaultTypes
      )
  