{-# LANGUAGE OverloadedStrings #-}
module Package.C.Error ( printErr
, unrecognized
, indexError
, corruptedDatabase
, unfoundPackage
, parseErr
, notInstalled
, PackageError (..)
) where
import CPkgPrelude
import Data.Text.Prettyprint.Doc.Custom
import Prettyprinter
import Prettyprinter.Render.Text
import System.Exit
data PackageError = Unrecognized String
| IndexError String
| CorruptedDatabase
| UnfoundPackage
| NotInstalled String
| ParseFailed String
instance Pretty PackageError where
pretty :: forall ann. PackageError -> Doc ann
pretty (Unrecognized String
t) = Doc ann
"Error: Unrecognized archive format when unpacking" Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<#> Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
hang Int
2 (String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
t) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
hardline
pretty (IndexError String
str) = Doc ann
"Error: Package" Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
str Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> Doc ann
"not found in your indices. Try 'cpkg install" Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
str Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"'." Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
hardline
pretty PackageError
CorruptedDatabase = Doc ann
"Error: Package database corrupted. Please try 'cpkg nuke'" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
hardline
pretty PackageError
UnfoundPackage = Doc ann
"Error: Package not found" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
hardline
pretty (ParseFailed String
str) = Doc ann
"Parse error:" Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
str
pretty (NotInstalled String
pkg) = Doc ann
"Package" Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
pkg Doc ann -> Doc ann -> Doc ann
forall a. Doc a -> Doc a -> Doc a
<+> Doc ann
"is not installed, so not removed." Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
hardline
printErr :: MonadIO m => PackageError -> m a
printErr :: forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr PackageError
e = IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Doc Any -> IO ()
forall ann. Doc ann -> IO ()
putDoc (PackageError -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. PackageError -> Doc ann
pretty PackageError
e) IO () -> IO a -> IO a
forall a b. IO a -> IO b -> IO b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> IO a
forall a. IO a
exitFailure)
notInstalled :: MonadIO m => String -> m a
notInstalled :: forall (m :: * -> *) a. MonadIO m => String -> m a
notInstalled = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr (PackageError -> m a) -> (String -> PackageError) -> String -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PackageError
NotInstalled
unrecognized :: MonadIO m => String -> m a
unrecognized :: forall (m :: * -> *) a. MonadIO m => String -> m a
unrecognized = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr (PackageError -> m a) -> (String -> PackageError) -> String -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PackageError
Unrecognized
indexError :: MonadIO m => String -> m a
indexError :: forall (m :: * -> *) a. MonadIO m => String -> m a
indexError = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr (PackageError -> m a) -> (String -> PackageError) -> String -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PackageError
IndexError
corruptedDatabase :: MonadIO m => m a
corruptedDatabase :: forall (m :: * -> *) a. MonadIO m => m a
corruptedDatabase = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr PackageError
CorruptedDatabase
unfoundPackage :: MonadIO m => m a
unfoundPackage :: forall (m :: * -> *) a. MonadIO m => m a
unfoundPackage = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr PackageError
UnfoundPackage
parseErr :: MonadIO m => String -> m a
parseErr :: forall (m :: * -> *) a. MonadIO m => String -> m a
parseErr = PackageError -> m a
forall (m :: * -> *) a. MonadIO m => PackageError -> m a
printErr (PackageError -> m a) -> (String -> PackageError) -> String -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PackageError
ParseFailed