Eventually-decentralized project hosting and management platform

[[ 🗃 ^WvWbo vervis ]] :: [📥 Inbox] [📤 Outbox] [🐤 Followers] [🤝 Collaborators] [🛠 Changes]

Clone

HTTPS: darcs clone https://vervis.peers.community/repos/WvWbo

SSH: darcs clone USERNAME@vervis.peers.community:WvWbo

Tags

TODO

src / Yesod /

FedURI.hs

{- This file is part of Vervis.
 -
 - Written in 2019 by fr33domlover <fr33domlover@riseup.net>.
 -
 - ♡ Copying is an act of love. Please copy, reuse and share.
 -
 - The author(s) have dedicated all copyright and related and neighboring
 - rights to this software to the public domain worldwide. This software is
 - distributed without any warranty.
 -
 - You should have received a copy of the CC0 Public Domain Dedication along
 - with this software. If not, see
 - <http://creativecommons.org/publicdomain/zero/1.0/>.
 -}

-- Switching to actor-based system in Web.Actor
-- So this module can be removed once not used anymore
-- Or kept around if can be useful to other projects?
module Yesod.FedURI
    ( SiteFedURI (..)
    , getEncodeRouteLocal
    , getEncodeRouteHome
    , getEncodeRouteFed
    , getEncodeRoutePageLocal
    , getEncodeRoutePageHome
    , getEncodeRoutePageFed
    )
where

import Yesod.Core

import Network.FedURI
import Yesod.MonadSite

import Yesod.Paginate.Local

class UriMode (SiteFedURIMode site) => SiteFedURI site where
    type SiteFedURIMode site

getEncodeRouteHome
    :: (MonadSite m, SiteEnv m ~ site, SiteFedURI site)
    => m (Route site -> ObjURI (SiteFedURIMode site))
getEncodeRouteHome = toFed <$> askUrlRender
    where
    toFed renderUrl route =
        case parseObjURI $ renderUrl route of
            Left e -> error $ "askUrlRender produced invalid ObjURI: " ++ e
            Right u -> u

getEncodeRouteLocal
    :: (MonadSite m, SiteEnv m ~ site, SiteFedURI site)
    => m (Route site -> LocalURI)
getEncodeRouteLocal = (objUriLocal .) <$> getEncodeRouteHome

getEncodeRouteFed
    :: ( MonadSite m
       , SiteEnv m ~ site
       , SiteFedURI site
       , SiteFedURIMode site ~ u
       )
    => m (Authority u -> Route site -> ObjURI u)
getEncodeRouteFed = (\ f a -> ObjURI a . f) <$> getEncodeRouteLocal

getEncodeRoutePageLocal
    :: (MonadSite m, SiteEnv m ~ site, SiteFedURI site, YesodPaginate site)
    => m (Route site -> Int -> LocalPageURI)
getEncodeRoutePageLocal =
    (\ f r n -> pageUriLocal $ f r n) <$> getEncodeRoutePageHome

getEncodeRoutePageHome
    :: (MonadSite m, SiteEnv m ~ site, SiteFedURI site, YesodPaginate site)
    => m (Route site -> Int -> PageURI (SiteFedURIMode site))
getEncodeRoutePageHome = do
    encodeRouteHome <- getEncodeRouteHome
    param <- asksSite sitePageParamName
    return $ \ route page ->
        let ObjURI a l = encodeRouteHome route
        in  PageURI a $ LocalPageURI l param page

getEncodeRoutePageFed
    :: ( MonadSite m
       , SiteEnv m ~ site
       , SiteFedURI site
       , YesodPaginate site
       , SiteFedURIMode site ~ u
       )
    => m (Authority u -> Route site -> Int -> PageURI u)
getEncodeRoutePageFed =
    (\ f a r n -> PageURI a $ f r n) <$> getEncodeRoutePageLocal
[See repo JSON]