Merge pull request 'Add FromHttpApiData instance' (#2) from dev into master

Reviewed-on: https://git.vergara.tech///Vergara_Tech/haskell-hexstring/pulls/2
This commit is contained in:
pitmutt 2024-09-04 19:50:42 +00:00 committed by Vergara Technologies LLC
commit e2d9a9aa93
Signed by: Vergara Technologies LLC
GPG key ID: 99DB473BB4715618
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/),
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]
### Added

View file

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

View file

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

View file

@ -35,6 +35,8 @@ import qualified GHC.Generics as GHC
import qualified Generics.SOP as SOP
import Text.Read
import Servant.API (FromHttpApiData(..))
-- | Represents a Hex string. Guarantees that all characters it contains
-- are valid hex characters.
newtype HexString = HexString
@ -56,6 +58,12 @@ instance FromJSON HexString where
instance ToJSON HexString where
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
-- hexadecimal characters.
hexString :: BS.ByteString -> HexString