{-# LANGUAGE OverloadedStrings #-}

-----------------------------------------------------------------------------

-----------------------------------------------------------------------------

{- |
 Module      :  OpenTelemetry.Resource.OperatingSystem.Detector
 Copyright   :  (c) Ian Duncan, 2021
 License     :  BSD-3
 Maintainer  :  Ian Duncan
 Stability   :  experimental
 Portability :  non-portable (GHC extensions)

 Detect information about the current system's OS.
-}
module OpenTelemetry.Resource.OperatingSystem.Detector (
  detectOperatingSystem,
) where

import qualified Data.Text as T
import OpenTelemetry.Resource.OperatingSystem
import System.Info (os)


{- | Retrieve any infomration able to be detected about the current operation system.

 Currently only supports 'osType' detection, but PRs are welcome to support additional
 details.

 @since 0.0.1.0
-}
detectOperatingSystem :: IO OperatingSystem
detectOperatingSystem :: IO OperatingSystem
detectOperatingSystem =
  forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$
    OperatingSystem
      { osType :: Text
osType =
          if String
os forall a. Eq a => a -> a -> Bool
== String
"mingw32"
            then Text
"windows"
            else String -> Text
T.pack String
os
      , osDescription :: Maybe Text
osDescription = forall a. Maybe a
Nothing
      , osName :: Maybe Text
osName = forall a. Maybe a
Nothing
      , osVersion :: Maybe Text
osVersion = forall a. Maybe a
Nothing
      }