module WeekDaze.OutputConfiguration.FileFormat(
FileFormat(
getFilePath,
getFormat
),
stdoutProxy,
mkFileFormat
) where
import Control.Arrow((&&&))
import qualified Control.DeepSeq
import qualified Data.Default
import qualified System.FilePath
import qualified Text.XML.HXT.Arrow.Pickle as HXT
import qualified ToolShed.SelfValidate
import qualified WeekDaze.OutputConfiguration.Format as OutputConfiguration.Format
stdoutProxy :: String
stdoutProxy = "-"
tag :: String
tag = "fileFormat"
filePathTag :: String
filePathTag = "filePath"
data FileFormat minimumContrastRatio = MkFileFormat {
getFilePath :: System.FilePath.FilePath,
getFormat :: OutputConfiguration.Format.Format minimumContrastRatio
} deriving (Eq, Show)
instance Show minimumContrastRatio => ToolShed.SelfValidate.SelfValidator (FileFormat minimumContrastRatio) where
getErrors fileFormat = ToolShed.SelfValidate.extractErrors [
(
not . System.FilePath.isValid $ getFilePath fileFormat,
"invalid file-path; " ++ show fileFormat
)
]
instance Data.Default.Default (FileFormat minimumContrastRatio) where
def = MkFileFormat stdoutProxy Data.Default.def
mkFileFormat
:: Show minimumContrastRatio
=> System.FilePath.FilePath
-> OutputConfiguration.Format.Format minimumContrastRatio
-> FileFormat minimumContrastRatio
mkFileFormat filePath format
| ToolShed.SelfValidate.isValid fileFormat = fileFormat
| otherwise = error $ "WeekDaze.OutputConfiguration.FileFormat.mkFileFormat:\t" ++ ToolShed.SelfValidate.getFirstError fileFormat ++ "."
where
fileFormat = MkFileFormat filePath format
instance (
Fractional minimumContrastRatio,
HXT.XmlPickler minimumContrastRatio,
Ord minimumContrastRatio,
Show minimumContrastRatio
) => HXT.XmlPickler (FileFormat minimumContrastRatio) where
xpickle = HXT.xpElem tag . HXT.xpWrap (
uncurry mkFileFormat,
getFilePath &&& getFormat
) $ HXT.xpTextAttr filePathTag `HXT.xpPair` HXT.xpickle
instance Control.DeepSeq.NFData minimumContrastRatio => Control.DeepSeq.NFData (FileFormat minimumContrastRatio) where
rnf = Control.DeepSeq.rnf . (getFilePath &&& getFormat)