From 1fc5ef87de5afcfaf218b64e025461bba2f160a3 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Mon, 8 May 2023 09:52:49 -0400
Subject: [PATCH] a Default instance for StorageServerAnnouncement to cut the
 noise

a bit, anyway
---
 gbs-downloader.cabal      |  4 +++-
 src/Tahoe/Announcement.hs |  9 +++++++++
 test/Spec.hs              | 26 ++++++++------------------
 3 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/gbs-downloader.cabal b/gbs-downloader.cabal
index ab7a6bc..f320b64 100644
--- a/gbs-downloader.cabal
+++ b/gbs-downloader.cabal
@@ -95,6 +95,7 @@ library
     , bytestring
     , connection
     , containers
+    , data-default-class
     , exceptions
     , http-client
     , http-client-tls
@@ -102,7 +103,7 @@ library
     , servant-client
     , servant-client-core
     , tahoe-chk
-    , tahoe-great-black-swamp  >=0.2       && <0.3
+    , tahoe-great-black-swamp  >=0.2 && <0.3
     , text
     , yaml
 
@@ -174,6 +175,7 @@ test-suite gbs-downloader-test
     , bytestring
     , containers
     , crypto-api
+    , data-default-class
     , gbs-downloader
     , hedgehog
     , tahoe-chk
diff --git a/src/Tahoe/Announcement.hs b/src/Tahoe/Announcement.hs
index 1729bba..7fbf4f7 100644
--- a/src/Tahoe/Announcement.hs
+++ b/src/Tahoe/Announcement.hs
@@ -11,6 +11,7 @@ module Tahoe.Announcement (
 import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), object, withObject, (.:), (.:?), (.=))
 import qualified Data.ByteString as B
 import Data.ByteString.Base32 (decodeBase32Unpadded, encodeBase32Unpadded)
+import Data.Default.Class (Default (def))
 import qualified Data.Map.Strict as Map
 import Data.Maybe (fromMaybe)
 import qualified Data.Text
@@ -44,6 +45,14 @@ data StorageServerAnnouncement = StorageServerAnnouncement
     }
     deriving (Eq, Ord, Show)
 
+instance Default StorageServerAnnouncement where
+    def =
+        StorageServerAnnouncement
+            { storageServerAnnouncementFURL = Nothing
+            , storageServerAnnouncementNick = Nothing
+            , storageServerAnnouncementPermutationSeed = Nothing
+            }
+
 -- Support deserialization of a StorageServerAnnouncement from the
 -- ``servers.yaml`` format supported by Tahoe-LAFS.
 instance FromJSON StorageServerAnnouncement where
diff --git a/test/Spec.hs b/test/Spec.hs
index 3fbcda4..cf7bcce 100644
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -8,6 +8,7 @@ import qualified Data.Binary as Binary
 import qualified Data.ByteString as B
 import Data.ByteString.Base32 (encodeBase32Unpadded)
 import qualified Data.ByteString.Lazy as BL
+import Data.Default.Class (Default (def))
 import qualified Data.Map.Strict as Map
 import qualified Data.Set as Set
 import qualified Data.Text as T
@@ -109,12 +110,7 @@ tests =
         , testCase "no reachable servers" $ do
             -- If we can't contact any configured server then we can't
             -- possibly get enough shares to recover the application data.
-            let ann =
-                    StorageServerAnnouncement
-                        { storageServerAnnouncementFURL = Nothing
-                        , storageServerAnnouncementNick = Just "unreachable"
-                        , storageServerAnnouncementPermutationSeed = Nothing
-                        }
+            let ann = def{storageServerAnnouncementNick = Just "unreachable"}
                 anns =
                     Map.fromList
                         [
@@ -136,10 +132,9 @@ tests =
                     Map.fromList
                         [
                             ( "v0-abc123"
-                            , StorageServerAnnouncement
+                            , def
                                 { storageServerAnnouncementFURL = Just "somewhere"
                                 , storageServerAnnouncementNick = Just "abc123"
-                                , storageServerAnnouncementPermutationSeed = Nothing
                                 }
                             )
                         ]
@@ -170,18 +165,16 @@ tests =
                     Map.fromList
                         [
                             ( "v0-abc123"
-                            , StorageServerAnnouncement
+                            , def
                                 { storageServerAnnouncementFURL = Just "somewhere"
                                 , storageServerAnnouncementNick = Just "abc123"
-                                , storageServerAnnouncementPermutationSeed = Nothing
                                 }
                             )
                         ,
                             ( "v0-abc456"
-                            , StorageServerAnnouncement
+                            , def
                                 { storageServerAnnouncementFURL = Just "elsewhere"
                                 , storageServerAnnouncementNick = Just "abc123"
-                                , storageServerAnnouncementPermutationSeed = Nothing
                                 }
                             )
                         ]
@@ -217,10 +210,9 @@ tests =
                     Map.fromList
                         [
                             ( "v0-abc123"
-                            , StorageServerAnnouncement
+                            , def
                                 { storageServerAnnouncementFURL = Just "somewhere"
                                 , storageServerAnnouncementNick = Just "abc123"
-                                , storageServerAnnouncementPermutationSeed = Nothing
                                 }
                             )
                         ]
@@ -248,10 +240,9 @@ tests =
                     Map.fromList
                         [
                             ( "v0-abc123"
-                            , StorageServerAnnouncement
+                            , def
                                 { storageServerAnnouncementFURL = Just "somewhere"
                                 , storageServerAnnouncementNick = Just "abc123"
-                                , storageServerAnnouncementPermutationSeed = Nothing
                                 }
                             )
                         ]
@@ -395,10 +386,9 @@ tests =
     -- server identifier.
     makeAnn :: StorageServerID -> StorageServerAnnouncement
     makeAnn sid =
-        StorageServerAnnouncement
+        def
             { storageServerAnnouncementFURL = Just $ "pb://" <> sid <> "/" <> sid
             , storageServerAnnouncementNick = Just . encodeBase32Unpadded . encodeUtf8 $ sid
-            , storageServerAnnouncementPermutationSeed = Nothing
             }
 
     -- Generate lists of ints that sum to a given total.
-- 
GitLab