@@ -0,0 +1,24 @@
1+{-# LANGUAGE EmptyCase #-}
2+{-# LANGUAGE FlexibleContexts #-}
3+{-# LANGUAGE GADTs #-}
4+{-# LANGUAGE LambdaCase #-}
5+{-# LANGUAGE RankNTypes #-}
6+module Common.Route where
7+
8+import Prelude hiding ((.))
9+
10+import Control.Category
11+import Control.Monad.Except
12+import Data.Text
13+import Data.Functor.Sum
14+import Obelisk.Route
15+
16+backendRouteEncoder
17+ :: forall check parse. (check ~ parse, MonadError Text parse)
18+ => Encoder check parse (R (Sum Void1 (ObeliskRoute IndexOnlyRoute))) PageName
19+backendRouteEncoder = Encoder $ do
20+ let componentEncoder = shadowEncoder void1Encoder $ obeliskRouteComponentEncoder indexOnlyRouteComponentEncoder
21+ restEncoder <- checkObeliskRouteRestEncoder indexOnlyRouteRestEncoder
22+ checkEncoder $ pathComponentEncoder (componentEncoder . someSumEncoder) $ \case
23+ InL backendRoute -> case backendRoute of {}
24+ InR obeliskRoute -> runValidEncoderFunc restEncoder obeliskRoute