tasklite-core-0.3.0.0: source/TaskToNote.hs
module TaskToNote where
import Protolude as P (
Eq,
Generic,
Show,
Text,
decodeUtf8,
(.),
(<$>),
(<*>),
)
import Data.Generics (Data)
import Data.Text as T (dropEnd)
import Data.Yaml as Yaml (ToJSON, encode)
import Database.SQLite.Simple (FromRow, field, fromRow, toRow)
import Database.SQLite.Simple.ToField (toField)
import Database.SQLite.Simple.ToRow (ToRow)
import Prettyprinter (Pretty (pretty))
-- | Record for storing entries of the `task_to_note` table
data TaskToNote = TaskToNote
{ ulid :: Text -- Ulid
, task_ulid :: Text
, note :: Text
}
deriving (Show, Eq, Generic, Data)
instance FromRow TaskToNote where
fromRow =
TaskToNote
<$> field
<*> field
<*> field
instance ToRow TaskToNote where
toRow TaskToNote{..} =
[ toField ulid
, toField task_ulid
, toField note
]
instance ToJSON TaskToNote
instance Pretty TaskToNote where
pretty =
pretty
. T.dropEnd 1 -- Drop trailing newline to maybe add it later
. decodeUtf8
. Yaml.encode