{-# LANGUAGE RecordWildCards, OverloadedStrings #-} module FoxReplace where import Data.Aeson import Data.Set (Set) import qualified Data.Set as Set newtype FoxReplace = FoxReplace (Set FoxReplaceGroup) deriving (Ord, Eq, Show) data FoxReplaceGroup = FoxReplaceGroup { groupName :: String , groupUrls :: Set String , groupSubs :: Set FoxReplaceSub , groupHtmlMode :: FoxReplaceHTML } deriving (Ord, Eq, Show) data FoxReplaceHTML = NoHTML | OutputOnlyHTML | BothHTML deriving (Ord, Eq, Enum, Show) data FoxReplaceSub = FoxReplaceSub { rInput, rOutput :: String , rInputType :: SubInput , rCaseSensitive :: Bool } deriving (Ord, Eq, Show) data SubInput = TextInput | WordInput | RegexpInput deriving (Ord, Eq, Enum, Show) instance ToJSON FoxReplace where toJSON (FoxReplace groupSet) = object [ "version" .= ("0.15" :: String) , "groups" .= groupSet ] instance ToJSON FoxReplaceGroup where toJSON FoxReplaceGroup{..} = object [ "name" .= groupName , "html" .= groupHtmlMode , "enabled" .= True , "urls" .= groupUrls , "substitutions" .= groupSubs ] instance ToJSON FoxReplaceHTML where toJSON NoHTML = String "none" toJSON OutputOnlyHTML = String "output" toJSON BothHTML = String "inputoutput" instance ToJSON FoxReplaceSub where toJSON FoxReplaceSub{..} = object [ "input" .= rInput , "output" .= rOutput , "inputType" .= rInputType , "caseSensitive" .= rCaseSensitive ] instance ToJSON SubInput where toJSON TextInput = String "text" toJSON WordInput = String "wholewords" toJSON RegexpInput = String "regexp"