From 4e01a5433a87c9fc476fbf21ca9c0ae953fc6c47 Mon Sep 17 00:00:00 2001
From: Ramakrishnan Muthukrishnan <ram@leastauthority.com>
Date: Sun, 20 Oct 2019 12:59:44 +0530
Subject: [PATCH] Move the `Database' data type into PaymentServer library

Rename the `Memory' constructor that constructs MemoryVoucherDatabase
into `MemoryDB' to avoid conflict.
---
 src/PaymentServer/Main.hs        |  8 ++------
 src/PaymentServer/Persistence.hs | 14 ++++++++++----
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/PaymentServer/Main.hs b/src/PaymentServer/Main.hs
index 8c52604..336cd6f 100644
--- a/src/PaymentServer/Main.hs
+++ b/src/PaymentServer/Main.hs
@@ -25,6 +25,7 @@ import Network.Wai.Middleware.RequestLogger
   )
 import PaymentServer.Persistence
   ( memory
+  , Database(Memory, SQLite3)
   )
 import PaymentServer.Issuer
   ( trivialIssue
@@ -63,11 +64,6 @@ data Issuer =
   | Ristretto
   deriving (Show, Eq, Ord, Read)
 
-data Database =
-  Memory
-  | SQLite3
-  deriving (Show, Eq, Ord, Read)
-
 data ServerConfig = ServerConfig
   { issuer       :: Issuer
   , signingKey   :: Maybe Text
@@ -91,7 +87,7 @@ sample = ServerConfig
   ( long "database"
     <> help "Which database to use: sqlite3 or memory"
     <> showDefault
-    <> value Memory )
+    <> value SQLite3 )
   <*> optional ( option str
   ( long "database-path"
     <> help "Path to on-disk database (sqlite3 only)"
diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs
index 3ad0226..81cb74d 100644
--- a/src/PaymentServer/Persistence.hs
+++ b/src/PaymentServer/Persistence.hs
@@ -4,6 +4,7 @@ module PaymentServer.Persistence
   ( Voucher
   , Fingerprint
   , RedeemError(NotPaid, AlreadyRedeemed)
+  , Database(Memory, SQLite3)
   , VoucherDatabase(payForVoucher, redeemVoucher)
   , MemoryVoucherDatabase
   , memory
@@ -49,6 +50,11 @@ data RedeemError =
   | AlreadyRedeemed
   deriving (Show, Eq)
 
+data Database =
+  Memory
+  | SQLite3
+  deriving (Show, Eq, Ord, Read)
+
 -- | A fingerprint cryptographically identifies a redemption of a voucher.
 -- When a voucher is redeemed, a number of random tokens are received
 -- alongside it.  These tokens are signed to create ZKAPs to return to the
@@ -82,7 +88,7 @@ class VoucherDatabase d where
 -- even the MemoryVoucherDatabase value).  This is primarily useful for
 -- testing.
 data MemoryVoucherDatabase =
-  Memory {
+  MemoryDB {
     -- | A set of vouchers which have been paid for.
     paid :: IORef (Set.Set Voucher)
     -- | A mapping from redeemed vouchers to fingerprints associated with the
@@ -91,11 +97,11 @@ data MemoryVoucherDatabase =
   }
 
 instance VoucherDatabase MemoryVoucherDatabase where
-  payForVoucher Memory{ paid = paid, redeemed = redeemed } voucher = do
+  payForVoucher MemoryDB{ paid = paid, redeemed = redeemed } voucher = do
     modifyIORef paid (Set.insert voucher)
     return ()
 
-  redeemVoucher Memory{ paid = paid, redeemed = redeemed } voucher fingerprint = do
+  redeemVoucher MemoryDB{ paid = paid, redeemed = redeemed } voucher fingerprint = do
     unpaid <- Set.notMember voucher <$> readIORef paid
     existingFingerprint <- Map.lookup voucher <$> readIORef redeemed
     case (unpaid, existingFingerprint) of
@@ -115,7 +121,7 @@ memory :: IO MemoryVoucherDatabase
 memory = do
   paid <- newIORef mempty
   redeemed <- newIORef mempty
-  return $ Memory paid redeemed
+  return $ MemoryDB paid redeemed
 
 instance VoucherDatabase Sqlite.Connection where
   -- payForVoucher :: Sqlite.Connection -> Voucher -> IO ()
-- 
GitLab