From 84aa1a5fce2e877cd8b3214dc4ddeb7bb0da1828 Mon Sep 17 00:00:00 2001 From: sabadev Date: Sun, 21 Mar 2021 12:31:00 -0400 Subject: [PATCH] Added functions for generating type-safe links. --- src/ApiTypes.hs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/ApiTypes.hs b/src/ApiTypes.hs index 0d1ad9a..47a95f3 100644 --- a/src/ApiTypes.hs +++ b/src/ApiTypes.hs @@ -11,10 +11,28 @@ type Api = Page :<|> Themes type Page = MainPage :<|> BlogPost type MainPage = ThemeParam :> Get '[HTML] (Html ()) type BlogPost = ThemeParam :> Capture "id" BlogId :> Get '[HTML] (Html ()) -type Themes = "style" :> (DarkTheme :<|> LightTheme) -type DarkTheme = "dark" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css -type LightTheme = "light" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css +type Themes = DarkTheme :<|> LightTheme +type DarkTheme = "style" :> "dark" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css +type LightTheme = "style" :> "light" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css type ThemeParam = QueryParam "theme" Theme apiProxy :: Proxy Api apiProxy = Proxy + +blogProxy :: Proxy BlogPost +blogProxy = Proxy + +darkThemeProxy :: Proxy DarkTheme +darkThemeProxy = Proxy + +lightThemeProxy :: Proxy LightTheme +lightThemeProxy = Proxy + +safeBlogLink :: MkLink BlogPost Link +safeBlogLink = safeLink apiProxy blogProxy + +safeDarkThemeLink :: MkLink DarkTheme Link +safeDarkThemeLink = safeLink apiProxy darkThemeProxy + +safeLightThemeLink :: MkLink LightTheme Link +safeLightThemeLink = safeLink apiProxy lightThemeProxy -- 2.20.1