diff options
Diffstat (limited to 'Types.hs')
-rw-r--r-- | Types.hs | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -16,6 +16,8 @@ import Val import Memory import Serialization +import Data.Time.Clock.POSIX + -- | Things that the developer sees. data Seen = Seen { seenData :: Val @@ -48,7 +50,8 @@ instance DataSize a => DataSize (Message a) where dataSize (ControlMessage c) = dataSize c -- | An activity (either Entered or Seen) with a pointer --- to a previous Activity. +-- to a previous Activity, and the amount of time elapsed since the +-- previous Activity. -- -- The Signature is over both the data in the activity, and its pointer. -- @@ -57,13 +60,15 @@ instance DataSize a => DataSize (Message a) where data Activity a = Activity { activity :: a , prevActivity :: Maybe Hash + , elapsedTime :: Maybe ElapsedTime , activitySignature :: Signature } deriving (Show, Generic) instance DataSize a => DataSize (Activity a) where dataSize a = dataSize (activity a) - + maybe 0 dataSize (prevActivity a) + + maybe 0 dataSize (prevActivity a) + + maybe 0 dataSize (elapsedTime a) + dataSize (activitySignature a) -- | A control message, which can be sent asynchronously. @@ -136,11 +141,25 @@ newtype GpgSig = GpgSig Val instance DataSize GpgSig where dataSize (GpgSig s) = dataSize s +-- | Elapsed time in seconds. +newtype ElapsedTime = ElapsedTime Double + deriving (Show, Generic, Eq) + +mkElapsedTime :: POSIXTime -> POSIXTime -> ElapsedTime +mkElapsedTime start end = ElapsedTime $ fromRational $ toRational (end - start) + +instance DataSize ElapsedTime where + dataSize _ = 16 -- 128 bit Double + data LogMessage = User (Message Seen) | Developer (Message Entered) deriving (Show, Generic) +instance Binary ElapsedTime +instance ToJSON ElapsedTime +instance FromJSON ElapsedTime + instance DataSize LogMessage where dataSize (User a) = dataSize a dataSize (Developer a) = dataSize a |