Add plaintext root

This commit is contained in:
Paul Brinkmeier 2023-04-06 13:56:57 +02:00
parent 2024e230a8
commit e344ddefb5

View File

@ -24,6 +24,7 @@ import Network.Wai (Application)
import Servant import Servant
( Accept (..) ( Accept (..)
, Handler , Handler
, Header
, MimeRender (..) , MimeRender (..)
, Server , Server
, ServerError (..) , ServerError (..)
@ -61,14 +62,18 @@ app :: Application
app = serve (Proxy :: Proxy API) server app = serve (Proxy :: Proxy API) server
type API = type API =
"utf8" :> Capture "bytes" Text :> Get '[PlainText, HTML] Utf8Model Header "Host" Text :> Get '[PlainText] RootModel
:<|> "utf8" :> Capture "bytes" Text :> Get '[PlainText, HTML] Utf8Model
:<|> "codepoints" :> Capture "codepoints" Text :> Get '[PlainText, HTML] CodepointsModel :<|> "codepoints" :> Capture "codepoints" Text :> Get '[PlainText, HTML] CodepointsModel
:<|> "text" :> Capture "text" Text :> Get '[PlainText, HTML] TextModel :<|> "text" :> Capture "text" Text :> Get '[PlainText, HTML] TextModel
server :: Server API server :: Server API
server = server =
utf8R :<|> codepointsR :<|> textR rootR :<|> utf8R :<|> codepointsR :<|> textR
where where
rootR host = do
pure $ RootModel $ fromMaybe "" host
utf8R bytesP = do utf8R bytesP = do
bytes <- Parsers.parseHexBytes bytesP `orThrow` const err400 bytes <- Parsers.parseHexBytes bytesP `orThrow` const err400
pure $ mkUtf8Model bytes pure $ mkUtf8Model bytes
@ -80,6 +85,30 @@ server =
textR textP = do textR textP = do
pure $ TextModel textP pure $ TextModel textP
-- /
newtype RootModel = RootModel
{ host :: Text
}
examples :: [Text]
examples =
[ "/text/✅🤔"
, "/codepoints/x2705+x1F914"
, "/utf8/e2.9c.85.f0.9f.a4.94"
]
instance MimeRender PlainText RootModel where
mimeRender _ model = renderText $ Text.unlines $
[ "⚞ utoy ⚟"
, ""
, "This is utoy, a URL-based Unicode playground. You can try these paths:"
, ""
] ++ map (urlBase <>) examples
where
-- We assume HTTPS here. Doesn't work for development on localhost.
urlBase = "https://" <> model.host
-- /bytes/<bytes> -- /bytes/<bytes>
newtype Utf8Model = Utf8Model newtype Utf8Model = Utf8Model
@ -197,7 +226,7 @@ instance MimeRender HTML TextModel where
instance MimeRender PlainText TextModel where instance MimeRender PlainText TextModel where
mimeRender _ model = renderText $ Table.render " " mimeRender _ model = renderText $ Table.render " "
[ map (Table.cl) [ map Table.cl
[ Text.pack [c] [ Text.pack [c]
, Text.pack $ printf "U+%04X" c , Text.pack $ printf "U+%04X" c
, Text.pack $ intercalate ", " $ allNames c , Text.pack $ intercalate ", " $ allNames c