module System.MemInfo where

import System.MemInfo.Internal
import Data.Attoparsec.ByteString.Char8 (parseOnly)
import Data.ByteString (ByteString)
import qualified Data.ByteString as B

parseMemInfo :: ByteString -> Maybe MemInfo
parseMemInfo bs = case parseOnly parseFile bs of
    Left _ -> Nothing
    Right x -> Just x

-- | Read `/proc/meminfo` and parse it into a `MemInfo`
getMemInfo :: IO MemInfo
getMemInfo = do
    res <- parseMemInfo <$> B.readFile "/proc/meminfo"
    case res of
        Just x -> return x
        Nothing -> fail "Could not parse /proc/meminfo"