packages feed

emacs-module-0.2: src/Data/Emacs/Module/Env/ProcessInput.hsc

----------------------------------------------------------------------------
-- |
-- Module      :  Data.Emacs.Module.Env.ProcessInput
-- Copyright   :  (c) Sergey Vinokurov 2022
-- License     :  Apache-2.0 (see LICENSE)
-- Maintainer  :  serg.foo@gmail.com
----------------------------------------------------------------------------

module Data.Emacs.Module.Env.ProcessInput
  ( Result(..)
  , resultToNum
  , resultFromNum
  ) where

import Data.Data (Data)
import Language.Haskell.TH.Syntax (Lift)
import Prettyprinter.Generics

#include <emacs-module.h>

-- | Result of 'process_inputs' Emacs API call.
data Result
  = Continue
  | Quit
  deriving (Eq, Ord, Show, Data, Generic, Lift)

instance Pretty Result where
  pretty = ppGeneric

{-# INLINE resultToNum #-}
resultToNum :: Num a => Result -> a
resultToNum = \case
  Continue -> (#const emacs_process_input_continue)
  Quit     -> (#const emacs_process_input_quit)

{-# INLINE resultFromNum #-}
resultFromNum :: (Eq a, Num a) => a -> Maybe Result
resultFromNum = \case
  (#const emacs_process_input_continue) -> Just Continue
  (#const emacs_process_input_quit)     -> Just Quit
  _                                     -> Nothing