From eb50a6bd64da18bb2f1d4a8f1a278437a324330b Mon Sep 17 00:00:00 2001 From: Emmanuel Denloye-Ito Date: Thu, 11 Apr 2024 18:33:46 -0400 Subject: [PATCH] Add Verifier datatype;move SigCapability to separate module --- chainweb-api.cabal | 2 ++ lib/Chainweb/Api/SigCapability.hs | 28 ++++++++++++++++++++++++++ lib/Chainweb/Api/Signer.hs | 21 +------------------- lib/Chainweb/Api/Verifier.hs | 33 +++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 lib/Chainweb/Api/SigCapability.hs create mode 100644 lib/Chainweb/Api/Verifier.hs 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"