This commit is contained in:
Gregor Kleen 2019-04-24 15:13:06 +02:00
parent 8e5bebc96f
commit 816ce0595e
2 changed files with 29 additions and 23 deletions

View File

@ -320,19 +320,16 @@ deriveJSON defaultOptions
} ''SubmissionMode } ''SubmissionMode
derivePersistFieldJSON ''SubmissionMode derivePersistFieldJSON ''SubmissionMode
instance PathPiece SubmissionMode where finitePathPiece ''SubmissionMode
toPathPiece = (Map.fromList (zip universeF verbs) !) [ "no-submissions"
where , "no-upload"
verbs = [ "no-submissions" , "no-unpack"
, "no-upload" , "unpack"
, "no-unpack" , "correctors"
, "unpack" , "correctors+no-upload"
, "correctors" , "correctors+no-unpack"
, "correctors+no-upload" , "correctors+unpack"
, "correctors+no-unpack" ]
, "correctors+unpack"
]
fromPathPiece = finiteFromPathPiece
data SubmissionModeDescr = SubmissionModeNone data SubmissionModeDescr = SubmissionModeNone
| SubmissionModeCorrector | SubmissionModeCorrector
@ -342,15 +339,12 @@ data SubmissionModeDescr = SubmissionModeNone
instance Universe SubmissionModeDescr instance Universe SubmissionModeDescr
instance Finite SubmissionModeDescr instance Finite SubmissionModeDescr
instance PathPiece SubmissionModeDescr where finitePathPiece ''SubmissionModeDescr
toPathPiece = (Map.fromList (zip universeF verbs) !) [ "no-submissions"
where , "correctors"
verbs = [ "no-submissions" , "users"
, "correctors" , "correctors+users"
, "users" ]
, "correctors+users"
]
fromPathPiece = finiteFromPathPiece
classifySubmissionMode :: SubmissionMode -> SubmissionModeDescr classifySubmissionMode :: SubmissionMode -> SubmissionModeDescr
classifySubmissionMode (SubmissionMode False Nothing ) = SubmissionModeNone classifySubmissionMode (SubmissionMode False Nothing ) = SubmissionModeNone

View File

@ -1,7 +1,7 @@
module Utils.PathPiece module Utils.PathPiece
( finiteFromPathPiece ( finiteFromPathPiece
, nullaryToPathPiece , nullaryToPathPiece
, nullaryPathPiece , nullaryPathPiece, finitePathPiece
, splitCamel , splitCamel
, camelToPathPiece, camelToPathPiece' , camelToPathPiece, camelToPathPiece'
, tuplePathPiece , tuplePathPiece
@ -16,6 +16,8 @@ import Data.Universe
import qualified Data.Text as Text import qualified Data.Text as Text
import qualified Data.Char as Char import qualified Data.Char as Char
import qualified Data.Map as Map
import Numeric.Natural import Numeric.Natural
import Data.List (foldl) import Data.List (foldl)
@ -45,6 +47,16 @@ nullaryPathPiece nullaryType mangle =
[ clause [] (normalB [e|finiteFromPathPiece|]) [] ] [ clause [] (normalB [e|finiteFromPathPiece|]) [] ]
] ]
finitePathPiece :: Name -> [Text] -> DecsQ
finitePathPiece finiteType verbs =
pure <$> instanceD (cxt []) [t|PathPiece $(conT finiteType)|]
[ funD 'toPathPiece
[ clause [] (normalB [|(Map.fromList (zip universeF verbs) !)|]) [] ]
, funD 'fromPathPiece
[ clause [] (normalB [e|(Map.fromList (zip verbs universeF) !?)|]) [] ]
]
splitCamel :: Textual t => t -> [t] splitCamel :: Textual t => t -> [t]
splitCamel = map fromList . reverse . helper (error "hasChange undefined at start of string") [] "" . otoList splitCamel = map fromList . reverse . helper (error "hasChange undefined at start of string") [] "" . otoList
where where