web3-0.7.0.0: src/Network/Ethereum/ABI/Codec.hs
{-# LANGUAGE TypeFamilies #-}
-- |
-- Module : Network.Ethereum.ABI.Codec
-- Copyright : Alexander Krupenkin 2016-2018
-- License : BSD3
--
-- Maintainer : mail@akru.me
-- Stability : experimental
-- Portability : noportable
--
-- Ethereum ABI encoding codec functions.
--
module Network.Ethereum.ABI.Codec (
encode
, decode
, encode'
, decode'
) where
import Data.ByteArray (ByteArray, ByteArrayAccess,
convert)
import Data.Serialize (runGet, runPut)
import Generics.SOP (Generic, Rep, from, to)
import Network.Ethereum.ABI.Class (ABIGet (..), ABIPut (..),
GenericABIGet (..),
GenericABIPut (..))
import Network.Ethereum.ABI.Generic ()
-- | Encode datatype to Ethereum ABI-encoding
encode :: (ABIPut a, ByteArray ba)
=> a
-> ba
{-# INLINE encode #-}
encode = convert . runPut . abiPut
-- | Generic driven version of 'encode'
encode' :: (Generic a,
Rep a ~ rep,
GenericABIPut rep,
ByteArray ba)
=> a
-> ba
{-# INLINE encode' #-}
encode' = convert . runPut . gAbiPut . from
-- | Decode datatype from Ethereum ABI-encoding
decode :: (ByteArrayAccess ba, ABIGet a)
=> ba
-> Either String a
{-# INLINE decode #-}
decode = runGet abiGet . convert
-- | Generic driven version of 'decode'
decode' :: (Generic a,
Rep a ~ rep,
GenericABIGet rep,
ByteArrayAccess ba)
=> ba
-> Either String a
decode' = runGet (to <$> gAbiGet) . convert