feat: add FromHttpApiData instance

This commit is contained in:
Rene Vergara 2024-09-04 14:42:08 -05:00
parent 39d8da7b11
commit 94e007a27a
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
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