Compare commits

...

2 commits

4 changed files with 17 additions and 1 deletions

View file

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.12.2.0]
### Added
- `FromHttpApiData` instance for Servant integration
## [0.12.0] ## [0.12.0]
### Added ### Added

View file

@ -39,6 +39,7 @@ library
, bytestring , bytestring
, foreign-rust , foreign-rust
, generics-sop , generics-sop
, servant
, text , text
default-language: Haskell2010 default-language: Haskell2010

View file

@ -1,5 +1,5 @@
name: hexstring name: hexstring
version: 0.12.1.0 version: 0.12.2.0
git: "https://git.vergara.tech/Vergara_Tech/haskell-hexstring" git: "https://git.vergara.tech/Vergara_Tech/haskell-hexstring"
license: MIT license: MIT
author: author:
@ -30,6 +30,7 @@ library:
- generics-sop - generics-sop
- borsh >= 0.2 - borsh >= 0.2
- foreign-rust - foreign-rust
- servant
tests: tests:
hextring-test: hextring-test:

View file

@ -35,6 +35,8 @@ import qualified GHC.Generics as GHC
import qualified Generics.SOP as SOP import qualified Generics.SOP as SOP
import Text.Read import Text.Read
import Servant.API (FromHttpApiData(..))
-- | Represents a Hex string. Guarantees that all characters it contains -- | Represents a Hex string. Guarantees that all characters it contains
-- are valid hex characters. -- are valid hex characters.
newtype HexString = HexString newtype HexString = HexString
@ -56,6 +58,12 @@ instance FromJSON HexString where
instance ToJSON HexString where instance ToJSON HexString where
toJSON = Data.Aeson.String . toText toJSON = Data.Aeson.String . toText
instance FromHttpApiData HexString where
parseUrlPiece s =
case BS16.decode (TE.encodeUtf8 s) of
Right s -> Right $ HexString s
Left e -> Left $ T.pack e
-- | Smart constructor which validates that all the text are actually -- | Smart constructor which validates that all the text are actually
-- hexadecimal characters. -- hexadecimal characters.
hexString :: BS.ByteString -> HexString hexString :: BS.ByteString -> HexString