packages feed

wkt-geom-0.0.12: 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

newtype Hex = Hex ByteString.ByteString

safeConvert :: (LazyByteString.ByteString -> Either String Geospatial.GeospatialGeometry) -> Hex -> Either String Geospatial.GeospatialGeometry
safeConvert f (Hex byteString) =
    case ByteStringBase16.decode byteString of
         Left  _       -> Left $ "Invalid hex representation: " <> ByteStringChar8.unpack byteString
         Right decoded -> f    $ LazyByteString.fromStrict decoded