Compare commits

..

No commits in common. "4856ec516f0733c8aef065166a417a358f12fe62" and "4dc9143dbc83e88c708e0642d5b7354d5a10155e" have entirely different histories.

6 changed files with 29 additions and 53 deletions

View file

@ -11,7 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- CHANGELOG.md
- Stack integration
- Borsh serialization for `HexString`
### Changed

View file

@ -1,4 +1,9 @@
haskell-hexstring
=================
[![Build Status](https://travis-ci.org/solatis/haskell-hexstring.png?branch=master)](https://travis-ci.org/solatis/haskell-hexstring)
[![Coverage Status](https://coveralls.io/repos/solatis/haskell-hexstring/badge.svg?branch=master)](https://coveralls.io/r/solatis/haskell-hexstring?branch=master)
[![MIT](http://b.repl.ca/v1/license-MIT-blue.png)](http://en.wikipedia.org/wiki/MIT_License)
[![Haskell](http://b.repl.ca/v1/language-haskell-lightgrey.png)](http://haskell.org)
Fast and safe representation of a hex string

View file

@ -35,10 +35,7 @@ library
, base >=4.7 && <5
, base16-bytestring
, binary
, borsh >=0.2
, bytestring
, foreign-rust
, generics-sop
, text
default-language: Haskell2010

View file

@ -27,9 +27,6 @@ library:
- bytestring
- base16-bytestring
- aeson
- generics-sop
- borsh >= 0.2
- foreign-rust
tests:
hextring-test:

View file

@ -1,53 +1,36 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.HexString ( HexString
, hexString
, fromBinary
, toBinary
, fromBytes
, toBytes
, toText ) where
module Data.HexString
( HexString
, hexString
, fromBinary
, toBinary
, fromBytes
, toBytes
, toText
) where
import Control.Applicative (pure)
import Codec.Borsh
import Control.Applicative (pure)
import Data.Aeson
import Data.Word (Word8)
import Data.Aeson
import Data.Word (Word8)
import qualified Data.ByteString as BS
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base16 as BS16 (decodeLenient, encode)
import qualified Data.ByteString.Lazy as BSL
import qualified Data.ByteString.Lazy as BSL
import Data.Structured
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Data.Binary as B (Binary, decode, encode)
import qualified GHC.Generics as GHC
import qualified Generics.SOP as SOP
import qualified Data.Binary as B (Binary, decode, encode)
-- | Represents a Hex string. Guarantees that all characters it contains
-- are valid hex characters.
data HexString =
HexString BS.ByteString
deriving stock (Prelude.Show, GHC.Generic)
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
deriving anyclass (Data.Structured.Show)
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct HexString
deriving ( Show, Eq, Ord )
instance FromJSON HexString where
parseJSON = withText "HexString" $ pure . hexString . TE.encodeUtf8
instance ToJSON HexString where
toJSON = Data.Aeson.String . toText
toJSON = String . toText
-- | Smart constructor which validates that all the text are actually
-- hexadecimal characters.
@ -55,15 +38,16 @@ hexString :: BS.ByteString -> HexString
hexString bs =
let isValidHex :: Word8 -> Bool
isValidHex c
| (48 <= c) && (c < 58) = True
| (48 <= c) && (c < 58) = True
| (97 <= c) && (c < 103) = True
| otherwise = False
in if BS.all isValidHex bs
then HexString bs
else error ("Not a valid hex string: " ++ Prelude.show bs)
| otherwise = False
in if BS.all isValidHex bs
then HexString bs
else error ("Not a valid hex string: " ++ show bs)
-- | Converts a 'B.Binary' to a 'HexString' value
fromBinary :: B.Binary a => a -> HexString
fromBinary :: B.Binary a => a -> HexString
fromBinary = hexString . BS16.encode . BSL.toStrict . B.encode
-- | Converts a 'HexString' to a 'B.Binary' value

View file

@ -2,9 +2,3 @@ resolver: lts-21.22
packages:
- .
extra-deps:
- git: https://github.com/well-typed/borsh.git
commit: d2fcfa159e0a844b1ec5e8ed3e232d4b380fa831
- git: https://git.vergara.tech/Vergara_Tech/haskell-foreign-rust.git
commit: 787c2e813eb3a5d16c375d4b37dfefbd2adcdf05