diff --git a/chainweb-api.cabal b/chainweb-api.cabal index 694f9eb..db5b6b6 100644 --- a/chainweb-api.cabal +++ b/chainweb-api.cabal @@ -69,9 +69,11 @@ library Chainweb.Api.Payload Chainweb.Api.RespItems Chainweb.Api.Sig + Chainweb.Api.SigCapability Chainweb.Api.Signer Chainweb.Api.StringEncoded Chainweb.Api.Transaction + Chainweb.Api.Verifier ChainwebData.Api ChainwebData.EventDetail ChainwebData.TransferDetail diff --git a/lib/Chainweb/Api/SigCapability.hs b/lib/Chainweb/Api/SigCapability.hs new file mode 100644 index 0000000..f2fa3dc --- /dev/null +++ b/lib/Chainweb/Api/SigCapability.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +module Chainweb.Api.SigCapability where + +------------------------------------------------------------------------------ +import Data.Aeson +import Data.Ord (comparing) +import Data.Text (Text) +------------------------------------------------------------------------------ + +data SigCapability = SigCapability + { _scName :: Text + , _scArgs :: [Value] + } deriving (Eq,Show) + +instance Ord SigCapability where + compare = comparing _scName + +instance ToJSON SigCapability where + toJSON SigCapability{..} = object + [ "name" .= _scName + , "args" .= _scArgs + ] + +instance FromJSON SigCapability where + parseJSON = withObject "SigCapability" $ \o -> SigCapability + <$> o .: "name" + <*> o .: "args" diff --git a/lib/Chainweb/Api/Signer.hs b/lib/Chainweb/Api/Signer.hs index 3636dad..9955745 100644 --- a/lib/Chainweb/Api/Signer.hs +++ b/lib/Chainweb/Api/Signer.hs @@ -1,34 +1,15 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} - module Chainweb.Api.Signer where ------------------------------------------------------------------------------ +import Chainweb.Api.SigCapability import Data.Aeson import Data.Maybe (fromMaybe, catMaybes) import Data.Ord import Data.Text (Text) ------------------------------------------------------------------------------ -data SigCapability = SigCapability - { _scName :: Text - , _scArgs :: [Value] - } deriving (Eq,Show) - -instance Ord SigCapability where - compare = comparing _scName - -instance ToJSON SigCapability where - toJSON SigCapability{..} = object - [ "name" .= _scName - , "args" .= _scArgs - ] - -instance FromJSON SigCapability where - parseJSON = withObject "SigCapability" $ \o -> SigCapability - <$> o .: "name" - <*> o .: "args" - data Signer = Signer { _signer_addr :: Maybe Text , _signer_scheme :: Maybe Text diff --git a/lib/Chainweb/Api/Verifier.hs b/lib/Chainweb/Api/Verifier.hs new file mode 100644 index 0000000..405e79b --- /dev/null +++ b/lib/Chainweb/Api/Verifier.hs @@ -0,0 +1,33 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +module Chainweb.Api.Verifier where + +------------------------------------------------------------------------------ +import Chainweb.Api.SigCapability +import Data.Aeson +import Data.Maybe (catMaybes) +import Data.Ord +import Data.Text (Text) +------------------------------------------------------------------------------ + +data Verifier = Verifier + { _verifier_name :: Maybe Text + , _verifier_proof :: Maybe Text + , _verifier_capList :: [SigCapability] + } deriving (Eq, Show) + +instance Ord Verifier where + compare = comparing _verifier_name + +instance ToJSON Verifier where + toJSON Verifier{..} = object $ catMaybes + [ fmap ("name" .=) _verifier_name + , fmap ("proof" .=) _verifier_proof + , Just $ "clist" .= _verifier_capList + ] + +instance FromJSON Verifier where + parseJSON = withObject "Verifier" $ \o -> Verifier + <$> o .:? "name" + <*> o .:? "proof" + <*> o .: "clist"