35 lines
806 B
Haskell
35 lines
806 B
Haskell
module DND.Sheet.Parser
|
|
(getSheet
|
|
, parseSheet
|
|
, listSkills
|
|
, createExample
|
|
, getName
|
|
) where
|
|
|
|
import Data.Aeson
|
|
import DND.Sheet.Content
|
|
import DND.Bob(bob)
|
|
import qualified Data.ByteString.Lazy as B
|
|
import qualified Data.ByteString.Lazy.UTF8 as BSU
|
|
import Data.Maybe (fromJust)
|
|
|
|
getSheet :: FilePath -> IO B.ByteString
|
|
getSheet = B.readFile
|
|
|
|
parseSheet :: FilePath -> IO Character
|
|
parseSheet x = do
|
|
file <- B.readFile x
|
|
let character = decode file :: Maybe Character
|
|
return $ fromJust character
|
|
|
|
listSkills :: Character -> IO ()
|
|
listSkills = mapM_ (mapM_ putStrLn)
|
|
. filter (not . null)
|
|
. map (map skillName . skills)
|
|
. stats
|
|
|
|
createExample :: FilePath -> IO ()
|
|
createExample = flip encodeFile bob
|
|
|
|
getName :: Character -> String
|
|
getName = charName . preamble |