packages feed

tricorder-0.6.0.0: src/Tricorder/Session/HaskellHooks.hs

module Tricorder.Session.HaskellHooks
    ( HaskellHooks (..)
    , display
    )
where

import Atelier.Types.JSON.QuietSnake (QuietSnake (..))
import Data.Aeson (FromJSON, ToJSON)
import Data.Default (Default (..))

import Data.Text qualified as T

import Tricorder.Session.Hook (Hook)

import Tricorder.Session.Hook qualified as Hook


data HaskellHooks = HaskellHooks
    { fileAdded :: Maybe Hook
    , fileModified :: Maybe Hook
    , fileRemoved :: Maybe Hook
    }
    deriving stock (Eq, Generic, Show)
    deriving (FromJSON, ToJSON) via QuietSnake HaskellHooks


instance Default HaskellHooks where
    def =
        HaskellHooks
            { fileAdded = Nothing
            , fileModified = Nothing
            , fileRemoved = Nothing
            }


display :: HaskellHooks -> Text
display hooks =
    T.intercalate
        "\n"
        [ "file_added: " <> maybe "<unset>" Hook.getHook hooks.fileAdded
        , "file_modified: " <> maybe "<unset>" Hook.getHook hooks.fileModified
        , "file_removed: " <> maybe "<unset>" Hook.getHook hooks.fileRemoved
        ]