more OsPath conversion
keyFile has a nice improvement; since a Key is a ShortByteString, it can be converted to an OsPath without needing the copy that was done before. Unfortunately, fileKey has to convert from a ShortByteString to a ByteString in order to use attoparsec, and then the results get converted back to an OsPath, so there are now 2 copies. Maybe attoparsec will eventually get a ShortByteString API, see https://github.com/haskell/attoparsec/issues/225 Sponsored-by: Joshua Antonishen
This commit is contained in:
parent
98a0a9ddff
commit
7ebef6cd1b
5 changed files with 249 additions and 215 deletions
10
Key.hs
10
Key.hs
|
@ -18,6 +18,7 @@ module Key (
|
|||
keyParser,
|
||||
serializeKey,
|
||||
serializeKey',
|
||||
serializeKey'',
|
||||
deserializeKey,
|
||||
deserializeKey',
|
||||
nonChunkKey,
|
||||
|
@ -31,7 +32,7 @@ module Key (
|
|||
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.ByteString as S
|
||||
import qualified Data.ByteString.Short as S (toShort, fromShort)
|
||||
import Data.ByteString.Short (ShortByteString, toShort, fromShort)
|
||||
import qualified Data.Attoparsec.ByteString as A
|
||||
|
||||
import Common
|
||||
|
@ -63,7 +64,10 @@ serializeKey :: Key -> String
|
|||
serializeKey = decodeBS . serializeKey'
|
||||
|
||||
serializeKey' :: Key -> S.ByteString
|
||||
serializeKey' = S.fromShort . keySerialization
|
||||
serializeKey' = fromShort . keySerialization
|
||||
|
||||
serializeKey'' :: Key -> ShortByteString
|
||||
serializeKey'' = keySerialization
|
||||
|
||||
deserializeKey :: String -> Maybe Key
|
||||
deserializeKey = deserializeKey' . encodeBS
|
||||
|
@ -73,7 +77,7 @@ deserializeKey' = eitherToMaybe . A.parseOnly keyParser
|
|||
|
||||
instance Arbitrary KeyData where
|
||||
arbitrary = Key
|
||||
<$> (S.toShort . encodeBS <$> (listOf1 $ elements $ ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-_\r\n \t"))
|
||||
<$> (toShort . encodeBS <$> (listOf1 $ elements $ ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "-_\r\n \t"))
|
||||
<*> (parseKeyVariety . encodeBS <$> (listOf1 $ elements ['A'..'Z'])) -- BACKEND
|
||||
<*> ((abs <$>) <$> arbitrary) -- size cannot be negative
|
||||
<*> ((abs . fromInteger <$>) <$> arbitrary) -- mtime cannot be negative
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue