module Haddock.Compat
  ( getProcessID
  , setEncoding
  ) where

import GHC.IO.Encoding.CodePage (mkLocaleEncoding)
import GHC.IO.Encoding.Failure (CodingFailureMode(TransliterateCodingFailure))
import System.IO (hSetEncoding, stdout, stderr)
import System.Win32.Process (ProcessId)
import qualified System.Win32.Process as Windows

-- | Avoid internal error: <stderr>: hPutChar: invalid argument (invalid character)' non UTF-8 Windows
setEncoding :: IO ()
setEncoding :: IO ()
setEncoding = do
  Handle -> TextEncoding -> IO ()
hSetEncoding Handle
stdout (TextEncoding -> IO ()) -> TextEncoding -> IO ()
forall a b. (a -> b) -> a -> b
$ CodingFailureMode -> TextEncoding
mkLocaleEncoding CodingFailureMode
TransliterateCodingFailure
  Handle -> TextEncoding -> IO ()
hSetEncoding Handle
stderr (TextEncoding -> IO ()) -> TextEncoding -> IO ()
forall a b. (a -> b) -> a -> b
$ CodingFailureMode -> TextEncoding
mkLocaleEncoding CodingFailureMode
TransliterateCodingFailure

getProcessID :: IO Int
getProcessID :: IO Int
getProcessID = forall a b. (Integral a, Num b) => a -> b
fromIntegral @ProcessId @Int (ProcessId -> Int) -> IO ProcessId -> IO Int
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> IO ProcessId
Windows.getCurrentProcessId