wkt-geom-0.0.5: src/Data/Hex.hs
module Data.Hex
( safeConvert
, Hex(..)
) where
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Base16 as ByteStringBase16
import qualified Data.ByteString.Char8 as ByteStringChar8
import qualified Data.ByteString.Lazy as LazyByteString
import qualified Data.Geospatial as Geospatial
import Data.Monoid ((<>))
newtype Hex = Hex ByteString.ByteString
safeConvert :: (LazyByteString.ByteString -> Either String Geospatial.GeospatialGeometry) -> Hex -> Either String Geospatial.GeospatialGeometry
safeConvert f (Hex byteString) =
let
(decoded, rest) = ByteStringBase16.decode byteString
in
if ByteString.null rest then
f $ LazyByteString.fromStrict decoded
else
Left ("Invalid hex representation: " <> ByteStringChar8.unpack byteString)