summaryrefslogtreecommitdiff
path: root/Types/UUID.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2016-11-17 17:19:04 -0400
committerJoey Hess <joeyh@joeyh.name>2016-11-17 18:30:50 -0400
commit65e903397c75b81278e8a4e5948b9499b2dfb58c (patch)
treed174c190c9143bc61e8e56a5f33c7fa585c7a058 /Types/UUID.hs
parente83028543181b1b25388ad20089153ca6c331179 (diff)
implementation of peer-to-peer protocol
For use with tor hidden services, and perhaps other transports later. Based on Utility.SimpleProtocol, it's a line-based protocol, interspersed with transfers of bytestrings of a specified size. Implementation of the local and remote sides of the protocol is done using a free monad. This lets monadic code be included here, without tying it to any particular way to get bytes peer-to-peer. This adds a dependency on the haskell package "free", although that was probably pulled in transitively from other dependencies already. This commit was sponsored by Jeff Goeke-Smith on Patreon.
Diffstat (limited to 'Types/UUID.hs')
-rw-r--r--Types/UUID.hs6
1 files changed, 6 insertions, 0 deletions
diff --git a/Types/UUID.hs b/Types/UUID.hs
index 4212eaa7f9..f5c9cda301 100644
--- a/Types/UUID.hs
+++ b/Types/UUID.hs
@@ -13,6 +13,8 @@ import qualified Data.Map as M
import qualified Data.UUID as U
import Data.Maybe
+import qualified Utility.SimpleProtocol as Proto
+
-- A UUID is either an arbitrary opaque string, or UUID info may be missing.
data UUID = NoUUID | UUID String
deriving (Eq, Ord, Show, Read)
@@ -35,3 +37,7 @@ isUUID :: String -> Bool
isUUID = isJust . U.fromString
type UUIDMap = M.Map UUID String
+
+instance Proto.Serializable UUID where
+ serialize = fromUUID
+ deserialize = Just . toUUID