{-# LANGUAGE DeriveAnyClass #-}
module Emanote.Route.SiteRoute.Type
( SiteRoute (..),
VirtualRoute (..),
ResourceRoute (..),
decodeVirtualRoute,
encodeVirtualRoute,
encodeTagIndexR,
)
where
import Data.Aeson (ToJSON)
import Emanote.Pandoc.Markdown.Syntax.HashTag qualified as HT
import Emanote.Route.Ext qualified as Ext
import Emanote.Route.ModelRoute (LMLRoute, StaticFileRoute, lmlRouteCase)
import Emanote.Route.R qualified as R
import Network.URI.Slug qualified as Slug
import Relude hiding (show)
import Text.Show (show)
data VirtualRoute
= VirtualRoute_Index
| VirtualRoute_TagIndex [HT.TagNode]
| VirtualRoute_Export
| VirtualRoute_StorkIndex
| VirtualRoute_TaskIndex
deriving stock (VirtualRoute -> VirtualRoute -> Bool
(VirtualRoute -> VirtualRoute -> Bool)
-> (VirtualRoute -> VirtualRoute -> Bool) -> Eq VirtualRoute
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VirtualRoute -> VirtualRoute -> Bool
$c/= :: VirtualRoute -> VirtualRoute -> Bool
== :: VirtualRoute -> VirtualRoute -> Bool
$c== :: VirtualRoute -> VirtualRoute -> Bool
Eq, Eq VirtualRoute
Eq VirtualRoute
-> (VirtualRoute -> VirtualRoute -> Ordering)
-> (VirtualRoute -> VirtualRoute -> Bool)
-> (VirtualRoute -> VirtualRoute -> Bool)
-> (VirtualRoute -> VirtualRoute -> Bool)
-> (VirtualRoute -> VirtualRoute -> Bool)
-> (VirtualRoute -> VirtualRoute -> VirtualRoute)
-> (VirtualRoute -> VirtualRoute -> VirtualRoute)
-> Ord VirtualRoute
VirtualRoute -> VirtualRoute -> Bool
VirtualRoute -> VirtualRoute -> Ordering
VirtualRoute -> VirtualRoute -> VirtualRoute
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: VirtualRoute -> VirtualRoute -> VirtualRoute
$cmin :: VirtualRoute -> VirtualRoute -> VirtualRoute
max :: VirtualRoute -> VirtualRoute -> VirtualRoute
$cmax :: VirtualRoute -> VirtualRoute -> VirtualRoute
>= :: VirtualRoute -> VirtualRoute -> Bool
$c>= :: VirtualRoute -> VirtualRoute -> Bool
> :: VirtualRoute -> VirtualRoute -> Bool
$c> :: VirtualRoute -> VirtualRoute -> Bool
<= :: VirtualRoute -> VirtualRoute -> Bool
$c<= :: VirtualRoute -> VirtualRoute -> Bool
< :: VirtualRoute -> VirtualRoute -> Bool
$c< :: VirtualRoute -> VirtualRoute -> Bool
compare :: VirtualRoute -> VirtualRoute -> Ordering
$ccompare :: VirtualRoute -> VirtualRoute -> Ordering
Ord, Int -> VirtualRoute -> ShowS
[VirtualRoute] -> ShowS
VirtualRoute -> FilePath
(Int -> VirtualRoute -> ShowS)
-> (VirtualRoute -> FilePath)
-> ([VirtualRoute] -> ShowS)
-> Show VirtualRoute
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [VirtualRoute] -> ShowS
$cshowList :: [VirtualRoute] -> ShowS
show :: VirtualRoute -> FilePath
$cshow :: VirtualRoute -> FilePath
showsPrec :: Int -> VirtualRoute -> ShowS
$cshowsPrec :: Int -> VirtualRoute -> ShowS
Show, (forall x. VirtualRoute -> Rep VirtualRoute x)
-> (forall x. Rep VirtualRoute x -> VirtualRoute)
-> Generic VirtualRoute
forall x. Rep VirtualRoute x -> VirtualRoute
forall x. VirtualRoute -> Rep VirtualRoute x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep VirtualRoute x -> VirtualRoute
$cfrom :: forall x. VirtualRoute -> Rep VirtualRoute x
Generic)
deriving anyclass ([VirtualRoute] -> Encoding
[VirtualRoute] -> Value
VirtualRoute -> Encoding
VirtualRoute -> Value
(VirtualRoute -> Value)
-> (VirtualRoute -> Encoding)
-> ([VirtualRoute] -> Value)
-> ([VirtualRoute] -> Encoding)
-> ToJSON VirtualRoute
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [VirtualRoute] -> Encoding
$ctoEncodingList :: [VirtualRoute] -> Encoding
toJSONList :: [VirtualRoute] -> Value
$ctoJSONList :: [VirtualRoute] -> Value
toEncoding :: VirtualRoute -> Encoding
$ctoEncoding :: VirtualRoute -> Encoding
toJSON :: VirtualRoute -> Value
$ctoJSON :: VirtualRoute -> Value
ToJSON)
data ResourceRoute
= ResourceRoute_StaticFile StaticFileRoute FilePath
| ResourceRoute_LML LMLRoute
deriving stock (ResourceRoute -> ResourceRoute -> Bool
(ResourceRoute -> ResourceRoute -> Bool)
-> (ResourceRoute -> ResourceRoute -> Bool) -> Eq ResourceRoute
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResourceRoute -> ResourceRoute -> Bool
$c/= :: ResourceRoute -> ResourceRoute -> Bool
== :: ResourceRoute -> ResourceRoute -> Bool
$c== :: ResourceRoute -> ResourceRoute -> Bool
Eq, Int -> ResourceRoute -> ShowS
[ResourceRoute] -> ShowS
ResourceRoute -> FilePath
(Int -> ResourceRoute -> ShowS)
-> (ResourceRoute -> FilePath)
-> ([ResourceRoute] -> ShowS)
-> Show ResourceRoute
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [ResourceRoute] -> ShowS
$cshowList :: [ResourceRoute] -> ShowS
show :: ResourceRoute -> FilePath
$cshow :: ResourceRoute -> FilePath
showsPrec :: Int -> ResourceRoute -> ShowS
$cshowsPrec :: Int -> ResourceRoute -> ShowS
Show, Eq ResourceRoute
Eq ResourceRoute
-> (ResourceRoute -> ResourceRoute -> Ordering)
-> (ResourceRoute -> ResourceRoute -> Bool)
-> (ResourceRoute -> ResourceRoute -> Bool)
-> (ResourceRoute -> ResourceRoute -> Bool)
-> (ResourceRoute -> ResourceRoute -> Bool)
-> (ResourceRoute -> ResourceRoute -> ResourceRoute)
-> (ResourceRoute -> ResourceRoute -> ResourceRoute)
-> Ord ResourceRoute
ResourceRoute -> ResourceRoute -> Bool
ResourceRoute -> ResourceRoute -> Ordering
ResourceRoute -> ResourceRoute -> ResourceRoute
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ResourceRoute -> ResourceRoute -> ResourceRoute
$cmin :: ResourceRoute -> ResourceRoute -> ResourceRoute
max :: ResourceRoute -> ResourceRoute -> ResourceRoute
$cmax :: ResourceRoute -> ResourceRoute -> ResourceRoute
>= :: ResourceRoute -> ResourceRoute -> Bool
$c>= :: ResourceRoute -> ResourceRoute -> Bool
> :: ResourceRoute -> ResourceRoute -> Bool
$c> :: ResourceRoute -> ResourceRoute -> Bool
<= :: ResourceRoute -> ResourceRoute -> Bool
$c<= :: ResourceRoute -> ResourceRoute -> Bool
< :: ResourceRoute -> ResourceRoute -> Bool
$c< :: ResourceRoute -> ResourceRoute -> Bool
compare :: ResourceRoute -> ResourceRoute -> Ordering
$ccompare :: ResourceRoute -> ResourceRoute -> Ordering
Ord, (forall x. ResourceRoute -> Rep ResourceRoute x)
-> (forall x. Rep ResourceRoute x -> ResourceRoute)
-> Generic ResourceRoute
forall x. Rep ResourceRoute x -> ResourceRoute
forall x. ResourceRoute -> Rep ResourceRoute x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ResourceRoute x -> ResourceRoute
$cfrom :: forall x. ResourceRoute -> Rep ResourceRoute x
Generic)
deriving anyclass ([ResourceRoute] -> Encoding
[ResourceRoute] -> Value
ResourceRoute -> Encoding
ResourceRoute -> Value
(ResourceRoute -> Value)
-> (ResourceRoute -> Encoding)
-> ([ResourceRoute] -> Value)
-> ([ResourceRoute] -> Encoding)
-> ToJSON ResourceRoute
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ResourceRoute] -> Encoding
$ctoEncodingList :: [ResourceRoute] -> Encoding
toJSONList :: [ResourceRoute] -> Value
$ctoJSONList :: [ResourceRoute] -> Value
toEncoding :: ResourceRoute -> Encoding
$ctoEncoding :: ResourceRoute -> Encoding
toJSON :: ResourceRoute -> Value
$ctoJSON :: ResourceRoute -> Value
ToJSON)
data SiteRoute
= SiteRoute_VirtualRoute VirtualRoute
| SiteRoute_ResourceRoute ResourceRoute
| SiteRoute_MissingR FilePath
| SiteRoute_AmbiguousR FilePath (NonEmpty LMLRoute)
deriving stock (SiteRoute -> SiteRoute -> Bool
(SiteRoute -> SiteRoute -> Bool)
-> (SiteRoute -> SiteRoute -> Bool) -> Eq SiteRoute
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SiteRoute -> SiteRoute -> Bool
$c/= :: SiteRoute -> SiteRoute -> Bool
== :: SiteRoute -> SiteRoute -> Bool
$c== :: SiteRoute -> SiteRoute -> Bool
Eq, Eq SiteRoute
Eq SiteRoute
-> (SiteRoute -> SiteRoute -> Ordering)
-> (SiteRoute -> SiteRoute -> Bool)
-> (SiteRoute -> SiteRoute -> Bool)
-> (SiteRoute -> SiteRoute -> Bool)
-> (SiteRoute -> SiteRoute -> Bool)
-> (SiteRoute -> SiteRoute -> SiteRoute)
-> (SiteRoute -> SiteRoute -> SiteRoute)
-> Ord SiteRoute
SiteRoute -> SiteRoute -> Bool
SiteRoute -> SiteRoute -> Ordering
SiteRoute -> SiteRoute -> SiteRoute
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SiteRoute -> SiteRoute -> SiteRoute
$cmin :: SiteRoute -> SiteRoute -> SiteRoute
max :: SiteRoute -> SiteRoute -> SiteRoute
$cmax :: SiteRoute -> SiteRoute -> SiteRoute
>= :: SiteRoute -> SiteRoute -> Bool
$c>= :: SiteRoute -> SiteRoute -> Bool
> :: SiteRoute -> SiteRoute -> Bool
$c> :: SiteRoute -> SiteRoute -> Bool
<= :: SiteRoute -> SiteRoute -> Bool
$c<= :: SiteRoute -> SiteRoute -> Bool
< :: SiteRoute -> SiteRoute -> Bool
$c< :: SiteRoute -> SiteRoute -> Bool
compare :: SiteRoute -> SiteRoute -> Ordering
$ccompare :: SiteRoute -> SiteRoute -> Ordering
Ord, (forall x. SiteRoute -> Rep SiteRoute x)
-> (forall x. Rep SiteRoute x -> SiteRoute) -> Generic SiteRoute
forall x. Rep SiteRoute x -> SiteRoute
forall x. SiteRoute -> Rep SiteRoute x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SiteRoute x -> SiteRoute
$cfrom :: forall x. SiteRoute -> Rep SiteRoute x
Generic)
instance Show SiteRoute where
show :: SiteRoute -> FilePath
show = \case
SiteRoute_MissingR FilePath
urlPath ->
FilePath
"404: " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
urlPath
SiteRoute_AmbiguousR FilePath
urlPath NonEmpty LMLRoute
_notes ->
FilePath
"Amb: " FilePath -> ShowS
forall a. Semigroup a => a -> a -> a
<> FilePath
urlPath
SiteRoute_ResourceRoute ResourceRoute
rr ->
case ResourceRoute
rr of
ResourceRoute_StaticFile StaticFileRoute
r FilePath
_fp ->
StaticFileRoute -> FilePath
forall a. Show a => a -> FilePath
show StaticFileRoute
r
ResourceRoute_LML LMLRoute
r ->
Either (R @SourceExt ('LMLType 'Md)) (R @SourceExt ('LMLType 'Org))
-> FilePath
forall a. Show a => a -> FilePath
show (Either
(R @SourceExt ('LMLType 'Md)) (R @SourceExt ('LMLType 'Org))
-> FilePath)
-> Either
(R @SourceExt ('LMLType 'Md)) (R @SourceExt ('LMLType 'Org))
-> FilePath
forall a b. (a -> b) -> a -> b
$ LMLRoute
-> Either
(R @SourceExt ('LMLType 'Md)) (R @SourceExt ('LMLType 'Org))
lmlRouteCase LMLRoute
r
SiteRoute_VirtualRoute VirtualRoute
x ->
VirtualRoute -> FilePath
forall a. Show a => a -> FilePath
show VirtualRoute
x
decodeVirtualRoute :: FilePath -> Maybe VirtualRoute
decodeVirtualRoute :: FilePath -> Maybe VirtualRoute
decodeVirtualRoute FilePath
fp =
(VirtualRoute
VirtualRoute_Index VirtualRoute -> Maybe () -> Maybe VirtualRoute
forall (f :: Type -> Type) a b. Functor f => a -> f b -> f a
<$ FilePath -> Maybe ()
decodeIndexR FilePath
fp)
Maybe VirtualRoute -> Maybe VirtualRoute -> Maybe VirtualRoute
forall (f :: Type -> Type) a. Alternative f => f a -> f a -> f a
<|> ([TagNode] -> VirtualRoute
VirtualRoute_TagIndex ([TagNode] -> VirtualRoute)
-> Maybe [TagNode] -> Maybe VirtualRoute
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> Maybe [TagNode]
decodeTagIndexR FilePath
fp)
Maybe VirtualRoute -> Maybe VirtualRoute -> Maybe VirtualRoute
forall (f :: Type -> Type) a. Alternative f => f a -> f a -> f a
<|> (VirtualRoute
VirtualRoute_Export VirtualRoute -> Maybe () -> Maybe VirtualRoute
forall (f :: Type -> Type) a b. Functor f => a -> f b -> f a
<$ FilePath -> Maybe ()
decodeExportR FilePath
fp)
Maybe VirtualRoute -> Maybe VirtualRoute -> Maybe VirtualRoute
forall (f :: Type -> Type) a. Alternative f => f a -> f a -> f a
<|> (VirtualRoute
VirtualRoute_StorkIndex VirtualRoute -> Maybe () -> Maybe VirtualRoute
forall (f :: Type -> Type) a b. Functor f => a -> f b -> f a
<$ FilePath -> Maybe ()
decodeStorkIndexR FilePath
fp)
Maybe VirtualRoute -> Maybe VirtualRoute -> Maybe VirtualRoute
forall (f :: Type -> Type) a. Alternative f => f a -> f a -> f a
<|> (VirtualRoute
VirtualRoute_TaskIndex VirtualRoute -> Maybe () -> Maybe VirtualRoute
forall (f :: Type -> Type) a b. Functor f => a -> f b -> f a
<$ FilePath -> Maybe ()
decodeTaskIndexR FilePath
fp)
decodeIndexR :: FilePath -> Maybe ()
decodeIndexR :: FilePath -> Maybe ()
decodeIndexR FilePath
fp = do
Slug
"-" :| [Slug
"all"] <- NonEmpty Slug -> Maybe (NonEmpty Slug)
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (NonEmpty Slug -> Maybe (NonEmpty Slug))
-> NonEmpty Slug -> Maybe (NonEmpty Slug)
forall a b. (a -> b) -> a -> b
$ R @() 'Html -> NonEmpty Slug
forall a (ext :: FileType a). R @a ext -> NonEmpty Slug
R.unRoute (R @() 'Html -> NonEmpty Slug) -> R @() 'Html -> NonEmpty Slug
forall a b. (a -> b) -> a -> b
$ FilePath -> R @() 'Html
R.decodeHtmlRoute FilePath
fp
Maybe ()
forall (f :: Type -> Type). Applicative f => f ()
pass
decodeExportR :: FilePath -> Maybe ()
decodeExportR :: FilePath -> Maybe ()
decodeExportR FilePath
fp = do
Slug
"-" :| [Slug
"export.json"] <- StaticFileRoute -> NonEmpty Slug
forall a (ext :: FileType a). R @a ext -> NonEmpty Slug
R.unRoute (StaticFileRoute -> NonEmpty Slug)
-> Maybe StaticFileRoute -> Maybe (NonEmpty Slug)
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> Maybe StaticFileRoute
R.decodeAnyRoute FilePath
fp
Maybe ()
forall (f :: Type -> Type). Applicative f => f ()
pass
decodeStorkIndexR :: FilePath -> Maybe ()
decodeStorkIndexR :: FilePath -> Maybe ()
decodeStorkIndexR FilePath
fp = do
Slug
"-" :| [Slug
"stork.st"] <- StaticFileRoute -> NonEmpty Slug
forall a (ext :: FileType a). R @a ext -> NonEmpty Slug
R.unRoute (StaticFileRoute -> NonEmpty Slug)
-> Maybe StaticFileRoute -> Maybe (NonEmpty Slug)
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> Maybe StaticFileRoute
R.decodeAnyRoute FilePath
fp
Maybe ()
forall (f :: Type -> Type). Applicative f => f ()
pass
decodeTagIndexR :: FilePath -> Maybe [HT.TagNode]
decodeTagIndexR :: FilePath -> Maybe [TagNode]
decodeTagIndexR FilePath
fp = do
Slug
"-" :| Slug
"tags" : [Slug]
tagPath <- NonEmpty Slug -> Maybe (NonEmpty Slug)
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (NonEmpty Slug -> Maybe (NonEmpty Slug))
-> NonEmpty Slug -> Maybe (NonEmpty Slug)
forall a b. (a -> b) -> a -> b
$ R @() 'Html -> NonEmpty Slug
forall a (ext :: FileType a). R @a ext -> NonEmpty Slug
R.unRoute (R @() 'Html -> NonEmpty Slug) -> R @() 'Html -> NonEmpty Slug
forall a b. (a -> b) -> a -> b
$ FilePath -> R @() 'Html
R.decodeHtmlRoute FilePath
fp
[TagNode] -> Maybe [TagNode]
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure ([TagNode] -> Maybe [TagNode]) -> [TagNode] -> Maybe [TagNode]
forall a b. (a -> b) -> a -> b
$ (Slug -> TagNode) -> [Slug] -> [TagNode]
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Text -> TagNode
HT.TagNode (Text -> TagNode) -> (Slug -> Text) -> Slug -> TagNode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Slug -> Text
Slug.unSlug) [Slug]
tagPath
decodeTaskIndexR :: FilePath -> Maybe ()
decodeTaskIndexR :: FilePath -> Maybe ()
decodeTaskIndexR FilePath
fp = do
Slug
"-" :| [Slug
"tasks"] <- NonEmpty Slug -> Maybe (NonEmpty Slug)
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (NonEmpty Slug -> Maybe (NonEmpty Slug))
-> NonEmpty Slug -> Maybe (NonEmpty Slug)
forall a b. (a -> b) -> a -> b
$ R @() 'Html -> NonEmpty Slug
forall a (ext :: FileType a). R @a ext -> NonEmpty Slug
R.unRoute (R @() 'Html -> NonEmpty Slug) -> R @() 'Html -> NonEmpty Slug
forall a b. (a -> b) -> a -> b
$ FilePath -> R @() 'Html
R.decodeHtmlRoute FilePath
fp
Maybe ()
forall (f :: Type -> Type). Applicative f => f ()
pass
encodeVirtualRoute :: VirtualRoute -> FilePath
encodeVirtualRoute :: VirtualRoute -> FilePath
encodeVirtualRoute = \case
VirtualRoute_TagIndex [TagNode]
tagNodes ->
R @() 'Html -> FilePath
forall a (ft :: FileType a). HasExt @a ft => R @a ft -> FilePath
R.encodeRoute (R @() 'Html -> FilePath) -> R @() 'Html -> FilePath
forall a b. (a -> b) -> a -> b
$ [TagNode] -> R @() 'Html
encodeTagIndexR [TagNode]
tagNodes
VirtualRoute
VirtualRoute_Index ->
R @() 'Html -> FilePath
forall a (ft :: FileType a). HasExt @a ft => R @a ft -> FilePath
R.encodeRoute (R @() 'Html -> FilePath) -> R @() 'Html -> FilePath
forall a b. (a -> b) -> a -> b
$ forall a (ext :: FileType a). NonEmpty Slug -> R @a ext
R.R @() @'Ext.Html (NonEmpty Slug -> R @() 'Html) -> NonEmpty Slug -> R @() 'Html
forall a b. (a -> b) -> a -> b
$ Slug
"-" Slug -> [Slug] -> NonEmpty Slug
forall a. a -> [a] -> NonEmpty a
:| [Slug
"all"]
VirtualRoute
VirtualRoute_Export ->
StaticFileRoute -> FilePath
forall a (ft :: FileType a). HasExt @a ft => R @a ft -> FilePath
R.encodeRoute (StaticFileRoute -> FilePath) -> StaticFileRoute -> FilePath
forall a b. (a -> b) -> a -> b
$ forall a (ext :: FileType a). NonEmpty Slug -> R @a ext
R.R @Ext.SourceExt @'Ext.AnyExt (NonEmpty Slug -> StaticFileRoute)
-> NonEmpty Slug -> StaticFileRoute
forall a b. (a -> b) -> a -> b
$ Slug
"-" Slug -> [Slug] -> NonEmpty Slug
forall a. a -> [a] -> NonEmpty a
:| [Slug
"export.json"]
VirtualRoute
VirtualRoute_StorkIndex ->
StaticFileRoute -> FilePath
forall a (ft :: FileType a). HasExt @a ft => R @a ft -> FilePath
R.encodeRoute (StaticFileRoute -> FilePath) -> StaticFileRoute -> FilePath
forall a b. (a -> b) -> a -> b
$ forall a (ext :: FileType a). NonEmpty Slug -> R @a ext
R.R @Ext.SourceExt @'Ext.AnyExt (NonEmpty Slug -> StaticFileRoute)
-> NonEmpty Slug -> StaticFileRoute
forall a b. (a -> b) -> a -> b
$ Slug
"-" Slug -> [Slug] -> NonEmpty Slug
forall a. a -> [a] -> NonEmpty a
:| [Slug
"stork.st"]
VirtualRoute
VirtualRoute_TaskIndex ->
R @() 'Html -> FilePath
forall a (ft :: FileType a). HasExt @a ft => R @a ft -> FilePath
R.encodeRoute (R @() 'Html -> FilePath) -> R @() 'Html -> FilePath
forall a b. (a -> b) -> a -> b
$ forall a (ext :: FileType a). NonEmpty Slug -> R @a ext
R.R @() @'Ext.Html (NonEmpty Slug -> R @() 'Html) -> NonEmpty Slug -> R @() 'Html
forall a b. (a -> b) -> a -> b
$ Slug
"-" Slug -> [Slug] -> NonEmpty Slug
forall a. a -> [a] -> NonEmpty a
:| [Slug
"tasks"]
encodeTagIndexR :: [HT.TagNode] -> R.R 'Ext.Html
encodeTagIndexR :: [TagNode] -> R @() 'Html
encodeTagIndexR [TagNode]
tagNodes =
NonEmpty Slug -> R @() 'Html
forall a (ext :: FileType a). NonEmpty Slug -> R @a ext
R.R (NonEmpty Slug -> R @() 'Html) -> NonEmpty Slug -> R @() 'Html
forall a b. (a -> b) -> a -> b
$ Slug
"-" Slug -> [Slug] -> NonEmpty Slug
forall a. a -> [a] -> NonEmpty a
:| Slug
"tags" Slug -> [Slug] -> [Slug]
forall a. a -> [a] -> [a]
: (TagNode -> Slug) -> [TagNode] -> [Slug]
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (FilePath -> Slug
forall a. IsString a => FilePath -> a
fromString (FilePath -> Slug) -> (TagNode -> FilePath) -> TagNode -> Slug
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> FilePath
forall a. ToString a => a -> FilePath
toString (Text -> FilePath) -> (TagNode -> Text) -> TagNode -> FilePath
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TagNode -> Text
HT.unTagNode) [TagNode]
tagNodes