content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE TypeFamilies #-}
  
  -----------------------------------------------------------------------------
  
  -----------------------------------------------------------------------------
  
  {- |
   Module      :  OpenTelemetry.Resource.OperatingSystem
   Copyright   :  (c) Ian Duncan, 2021
   License     :  BSD-3
   Description :  Information about the operating system (OS) on which the process represented by this resource is running.
   Maintainer  :  Ian Duncan
   Stability   :  experimental
   Portability :  non-portable (GHC extensions)
  
   In case of virtualized environments, this is the operating system as it is observed by the process, i.e., the virtualized guest rather than the underlying host.
  -}
  module OpenTelemetry.Resource.OperatingSystem where
  
  import Data.Text (Text)
  import OpenTelemetry.Resource
  
  
  -- | The operating system (OS) on which the process represented by this resource is running.
  data OperatingSystem = OperatingSystem
    { osType :: Text
    -- ^ The operating system type.
    --
    -- MUST be one of the following or, if none of the listed values apply, a custom value:
    --
    -- +-----------------+---------------------------------------+
    -- | Value           | Description                           |
    -- +=================+=======================================+
    -- | @windows@       | Microsoft Windows                     |
    -- +-----------------+---------------------------------------+
    -- | @linux@         | Linux                                 |
    -- +-----------------+---------------------------------------+
    -- | @darwin@        | Apple Darwin                          |
    -- +-----------------+---------------------------------------+
    -- | @freebsd@       | FreeBSD                               |
    -- +-----------------+---------------------------------------+
    -- | @netbsd@        | NetBSD                                |
    -- +-----------------+---------------------------------------+
    -- | @openbsd@       | OpenBSD                               |
    -- +-----------------+---------------------------------------+
    -- | @dragonflybsd@  | DragonFly BSD                         |
    -- +-----------------+---------------------------------------+
    -- | @hpux@          | HP-UX (Hewlett Packard Unix)          |
    -- +-----------------+---------------------------------------+
    -- | @aix@           | AIX (Advanced Interactive eXecutive)  |
    -- +-----------------+---------------------------------------+
    -- | @solaris@       | Oracle Solaris                        |
    -- +-----------------+---------------------------------------+
    -- | @z_os@          | IBM z/OS                              |
    -- +-----------------+---------------------------------------+
    , osDescription :: Maybe Text
    -- ^ Human readable (not intended to be parsed) OS version information, like e.g. reported by @ver@ or @lsb_release -a@ commands.
    , osName :: Maybe Text
    -- ^ Human readable operating system name.
    , osVersion :: Maybe Text
    -- ^ The version string of the operating system as defined in
    }
  
  
  instance ToResource OperatingSystem where
    type ResourceSchema OperatingSystem = 'Nothing
  
  
    -- TODO ^ schema
    toResource OperatingSystem {..} =
      mkResource
        [ "os.type" .= osType
        , "os.description" .=? osDescription
        , "os.name" .=? osName
        , "os.version" .=? osVersion
        ]
  