{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Language.Haskell.LSP.Capture where

import Data.Aeson
import Data.ByteString.Lazy.Char8 as BSL
import Data.Time.Clock
import GHC.Generics
import Language.Haskell.LSP.Messages

data Event = FromClient UTCTime FromClientMessage
           | FromServer UTCTime FromServerMessage
  deriving (Show, Eq, Generic, ToJSON, FromJSON)

captureFromServer :: FromServerMessage -> Maybe FilePath -> IO ()
captureFromServer _ Nothing = return ()
captureFromServer msg (Just fp) = do
  time <- getCurrentTime
  let entry = FromServer time msg

  BSL.appendFile fp $ BSL.append (encode entry) "\n"

captureFromClient :: FromClientMessage -> Maybe FilePath -> IO ()
captureFromClient _ Nothing = return ()
captureFromClient msg (Just fp) = do
  time <- getCurrentTime
  let entry = FromClient time msg

  BSL.appendFile fp $ BSL.append (encode entry) "\n"