bump 0.1.7
[diohsc.git] / Request.hs
blob88f299664838f836637480cfde1844480798e068
1 -- This file is part of Diohsc
2 -- Copyright (C) 2020 Martin Bays <mbays@sdf.org>
3 --
4 -- This program is free software: you can redistribute it and/or modify
5 -- it under the terms of version 3 of the GNU General Public License as
6 -- published by the Free Software Foundation, or any later version.
7 --
8 -- You should have received a copy of the GNU General Public License
9 -- along with this program. If not, see http://www.gnu.org/licenses/.
11 {-# LANGUAGE Safe #-}
13 module Request where
15 import Data.List (elemIndices)
16 import Data.Maybe (fromMaybe)
17 import Safe (lastMay, readMay)
18 import System.FilePath (FilePath)
20 import URI (URI, escapePathString, nullUri,
21 parseAbsoluteUri)
23 data Host = Host {hostName :: String, hostPort :: Int}
24 deriving (Eq,Ord,Show)
26 showHost :: Host -> String
27 showHost (Host name port) = name ++ ":" ++ show port
29 parseHost :: String -> Maybe Host
30 parseHost s = do
31 i <- lastMay $ elemIndices ':' s
32 (hostname, ':':portStr) <- return $ splitAt i s
33 Host hostname <$> readMay portStr
36 data Request
37 = NetworkRequest {requestHost :: Host, networkRequestUri :: URI}
38 | LocalFileRequest {requestPath :: FilePath}
39 deriving (Eq,Ord,Show)
41 requestUri :: Request -> URI
42 requestUri (NetworkRequest _ uri) = uri
43 requestUri (LocalFileRequest abspath) =
44 fromMaybe nullUri . parseAbsoluteUri $ "file://" <> escapePathString abspath