-- | Data types for the input parser.
--
-- This module is exposed for testing purposes only; applications should
-- never need to import this directly.
{-# LANGUAGE StrictData #-}
module Graphics.Vty.Platform.Unix.Input.Classify.Types
  ( KClass(..)
  , ClassifierState(..)
  )
where

import Graphics.Vty.Input.Events

import Data.ByteString.Char8 (ByteString)

-- | Whether the classifier is currently processing a chunked format.
-- Currently, only bracketed pastes use this.
data ClassifierState
    = ClassifierStart
    -- ^ Not processing a chunked format.
    | ClassifierInChunk ByteString [ByteString]
    -- ^ Currently processing a chunked format. The initial chunk is in the
    -- first argument and a reversed remainder of the chunks is collected in
    -- the second argument. At the end of the processing, the chunks are
    -- reversed and concatenated with the final chunk.

data KClass
    = Valid Event ByteString
    -- ^ A valid event was parsed. Any unused characters from the input
    -- stream are also provided.
    | Invalid
    -- ^ The input characters did not represent a valid event.
    | Prefix
    -- ^ The input characters form the prefix of a valid event character
    -- sequence.
    | Chunk
    -- ^ The input characters are either start of a bracketed paste chunk
    -- or in the middle of a bracketed paste chunk.
    deriving(Int -> KClass -> ShowS
[KClass] -> ShowS
KClass -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KClass] -> ShowS
$cshowList :: [KClass] -> ShowS
show :: KClass -> String
$cshow :: KClass -> String
showsPrec :: Int -> KClass -> ShowS
$cshowsPrec :: Int -> KClass -> ShowS
Show, KClass -> KClass -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KClass -> KClass -> Bool
$c/= :: KClass -> KClass -> Bool
== :: KClass -> KClass -> Bool
$c== :: KClass -> KClass -> Bool
Eq)