packages feed

fedora-repoquery-0.4: src/Arch.hs

module Arch (
  Arch(..),
  allArchs,
  eitherArch,
  showArch,
  getSystemArch
  )
where

import Data.List.Extra (lower)
import SimpleCmd (cmd, error')

data Arch = Source
          | X86_64
          | AARCH64
          | ARMV7HL
          | PPC64LE
          | S390X
          | I386
  deriving Eq

allArchs :: [Arch]
allArchs = [X86_64, AARCH64, PPC64LE, S390X]

eitherArch :: String -> Either String Arch
eitherArch s =
  case lower s of
    "source" -> Right Source
    "x86_64" -> Right X86_64
    "aarch64" -> Right AARCH64
    "armv7hl" -> Right ARMV7HL
    "s390x" -> Right S390X
    "ppc64le" -> Right PPC64LE
    "i386" -> Right I386
    _ -> Left $ "unknown arch: " ++ s

readArch :: String -> Arch
readArch =
  either error' id . eitherArch

showArch :: Arch -> String
showArch Source = "source"
showArch X86_64 = "x86_64"
showArch AARCH64 = "aarch64"
showArch ARMV7HL = "armv7hl"
showArch S390X = "s390x"
showArch PPC64LE = "ppc64le"
showArch I386 = "i386"

getSystemArch :: IO Arch
getSystemArch =
  readArch <$> cmd "rpm" ["--eval", "%{_arch}"]