module Ribosome.Menu.Data.MenuEvent where

import qualified Text.Show

import Ribosome.Menu.Data.MenuItem (MenuItem)
import Ribosome.Menu.Prompt.Data.Prompt (Prompt)

data QuitReason m a =
  Aborted
  |
  PromptError Text
  |
  NoOutput
  |
  Return a
  |
  Execute (m a)

instance Show (QuitReason m a) where
  show :: QuitReason m a -> String
show QuitReason m a
Aborted =
    String
"Aborted"
  show (PromptError Text
err) =
    String
"PromptError(" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. ToString a => a -> String
toString Text
err String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
")"
  show QuitReason m a
NoOutput =
    String
"NoOutput"
  show (Return a
_) =
    String
"Return"
  show (Execute m a
_) =
    String
"Execute"

data MenuEvent m a i =
  Init Prompt
  |
  PromptChange Prompt
  |
  Mapping Text Prompt
  |
  NewItems [MenuItem i]
  |
  Quit (QuitReason m a)
  deriving Int -> MenuEvent m a i -> ShowS
[MenuEvent m a i] -> ShowS
MenuEvent m a i -> String
(Int -> MenuEvent m a i -> ShowS)
-> (MenuEvent m a i -> String)
-> ([MenuEvent m a i] -> ShowS)
-> Show (MenuEvent m a i)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (m :: * -> *) a i. Show i => Int -> MenuEvent m a i -> ShowS
forall (m :: * -> *) a i. Show i => [MenuEvent m a i] -> ShowS
forall (m :: * -> *) a i. Show i => MenuEvent m a i -> String
showList :: [MenuEvent m a i] -> ShowS
$cshowList :: forall (m :: * -> *) a i. Show i => [MenuEvent m a i] -> ShowS
show :: MenuEvent m a i -> String
$cshow :: forall (m :: * -> *) a i. Show i => MenuEvent m a i -> String
showsPrec :: Int -> MenuEvent m a i -> ShowS
$cshowsPrec :: forall (m :: * -> *) a i. Show i => Int -> MenuEvent m a i -> ShowS
Show