module Ecluse.Core.Server.Path (
Filename,
mkFilename,
unFilename,
isSafeComponent,
encodeComponent,
) where
import Network.HTTP.Types.URI (urlEncode)
import Ecluse.Core.Text (isSafeComponent)
newtype Filename = Filename Text
deriving stock (Filename -> Filename -> Bool
(Filename -> Filename -> Bool)
-> (Filename -> Filename -> Bool) -> Eq Filename
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Filename -> Filename -> Bool
== :: Filename -> Filename -> Bool
$c/= :: Filename -> Filename -> Bool
/= :: Filename -> Filename -> Bool
Eq, Int -> Filename -> ShowS
[Filename] -> ShowS
Filename -> String
(Int -> Filename -> ShowS)
-> (Filename -> String) -> ([Filename] -> ShowS) -> Show Filename
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Filename -> ShowS
showsPrec :: Int -> Filename -> ShowS
$cshow :: Filename -> String
show :: Filename -> String
$cshowList :: [Filename] -> ShowS
showList :: [Filename] -> ShowS
Show)
mkFilename :: Text -> Maybe Filename
mkFilename :: Text -> Maybe Filename
mkFilename Text
raw
| Text -> Bool
isSafeComponent Text
raw = Filename -> Maybe Filename
forall a. a -> Maybe a
Just (Text -> Filename
Filename Text
raw)
| Bool
otherwise = Maybe Filename
forall a. Maybe a
Nothing
unFilename :: Filename -> Text
unFilename :: Filename -> Text
unFilename (Filename Text
name) = Text
name
encodeComponent :: Text -> Text
encodeComponent :: Text -> Text
encodeComponent = ByteString -> Text
forall a b. ConvertUtf8 a b => b -> a
decodeUtf8 (ByteString -> Text) -> (Text -> ByteString) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> ByteString -> ByteString
urlEncode Bool
True (ByteString -> ByteString)
-> (Text -> ByteString) -> Text -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
forall a b. ConvertUtf8 a b => a -> b
encodeUtf8