neuron-0.4.0.0: src/app/Neuron/Zettelkasten/Error.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Neuron.Zettelkasten.Error
( NeuronError (..),
)
where
import Neuron.Zettelkasten.ID (ZettelID, zettelIDSourceFileName, zettelIDText)
import Neuron.Zettelkasten.Query.Error
import Relude
import qualified Text.Show
import qualified Text.URI as URI
data NeuronError
= -- A zettel file contains invalid link that neuron cannot parse
NeuronError_BadQuery ZettelID QueryError
deriving (Eq)
instance Show NeuronError where
show (NeuronError_BadQuery fromZid e) =
let msg = case e of
Left qe ->
"it contains a query URI (" <> URI.render (queryParseErrorUri qe) <> ") " <> case qe of
QueryParseError_UnsupportedHost _uri ->
"with unsupported host"
QueryParseError_InvalidID _uri e'' ->
"with invalidID: " <> show e''
Right (QueryResultError_NoSuchZettel zid) ->
"Zettel "
<> zettelIDText zid
<> " does not exist"
in toString $
unlines
[ "",
" Zettel file \"" <> toText (zettelIDSourceFileName fromZid) <> "\" is malformed:",
" " <> msg
]