{-# LANGUAGE DeriveDataTypeable #-}
{- |
   Module      : Data.GraphViz.Exception
   Description : Graphviz-specific exceptions
   Copyright   : (c) Ivan Lazar Miljenovic
   License     : 3-Clause BSD-style
   Maintainer  : Ivan.Miljenovic@gmail.com
-}
module Data.GraphViz.Exception
       ( GraphvizException(..)
         -- * Re-exported for convenience.
       , mapException
       , throw
       , handle
       , bracket
       ) where

import Control.Exception
import Data.Typeable

-- -----------------------------------------------------------------------------

-- | Exceptions that arise from using this library fall into four
--   categories:
--
--   * Unable to parse provided Dot code.
--
--   * Dot code is not valid UTF-8.
--
--   * An error when trying to run an external program (e.g. @dot@).
--
--   * Treating a non-custom Attribute as a custom one.
--
data GraphvizException = NotDotCode String
                       | NotUTF8Dot String
                       | GVProgramExc String
                       | NotCustomAttr String
                       | CmdNotFound String
                       deriving (Eq, Ord, Typeable)

instance Show GraphvizException where
  showsPrec _ (NotDotCode str)    = showString $ "Error when parsing Dot code:\n" ++ str
  showsPrec _ (NotUTF8Dot str)    = showString $ "Invalid UTF-8 Dot code: " ++ str
  showsPrec _ (GVProgramExc str)  = showString $ "Error running utility program: " ++ str
  showsPrec _ (NotCustomAttr str) = showString $ "Not a custom Attribute: " ++ str
  showsPrec _ (CmdNotFound str)   = showString $ "Command not found: " ++ str

instance Exception GraphvizException