diff --git a/src/PaymentServer/Redemption.hs b/src/PaymentServer/Redemption.hs index 53f65736fbba74c209bf8285d219f0d62c9f0995..fa5a8e1d7e03eaef1722155d5fd84823b9407a24 100644 --- a/src/PaymentServer/Redemption.hs +++ b/src/PaymentServer/Redemption.hs @@ -29,6 +29,8 @@ import Data.Aeson , FromJSON(parseJSON) , withObject , (.:) + , (.:?) + , (.!=) , genericToEncoding , defaultOptions , encode @@ -80,9 +82,15 @@ data Redeem = Redeem { redeemVoucher :: Voucher -- ^ The voucher being redeemed. , redeemTokens :: [BlindedToken] -- ^ Tokens to be signed as part of this redemption. + , redeemCounter :: Integer -- ^ Counter tag on this redemption. } deriving (Show, Eq, Generic) -instance FromJSON Redeem +instance FromJSON Redeem where + parseJSON = withObject "redeem" $ \o -> do + voucher <- o .: "redeemVoucher" + tokens <- o .: "redeemTokens" + counter <- o .:? "redeemCounter" .!= 0 + return $ Redeem voucher tokens counter instance ToJSON Redeem where toEncoding = genericToEncoding defaultOptions