module Text.Puzzles.Code where
import Data.Puzzles.Code
import Text.Puzzles.Util
import Data.Yaml
import Data.Maybe (catMaybes)
parseCode :: Value -> Parser [CodePart]
parseCode (Object v) = fmap catMaybes . sequenceA $
[ fmap Rows' <$> v .:? "cell_rows_bottom"
, fmap Cols <$> v .:? "cell_cols"
, fmap RowsN' <$> v .:? "node_rows_bottom"
, fmap ColsN <$> v .:? "node_cols"
, fmap (LabelsN . fmap (fmap unAlpha . blankToMaybe)) <$> (do
v' <- v .:? "node_labels"
sequenceA (parseGrid <$> v'))
]
parseCode _ = fail "expected object"