packages feed

miv-0.4.7: src/Cmdline.hs

{-# LANGUAGE BlockArguments, LambdaCase, OverloadedStrings #-}
module Cmdline where

import Data.Text (Text, unpack)
import Data.YAML
import Prelude hiding (show)

import ShowText

data Cmdline = CmdlineExCommand
             | CmdlineForwardSearch
             | CmdlineBackwardSearch
             | CmdlineInput
             deriving (Eq, Ord)

instance ShowText Cmdline where
  show CmdlineExCommand      = ":"
  show CmdlineForwardSearch  = "/"
  show CmdlineBackwardSearch = "?"
  show CmdlineInput          = "@"

instance FromYAML Cmdline where
  parseYAML = withStr "!!str" \case
    ":" -> return CmdlineExCommand
    "/" -> return CmdlineForwardSearch
    "?" -> return CmdlineBackwardSearch
    "@" -> return CmdlineInput
    x   -> fail $ unpack $ "failed to parse cmdline: " <> x

cmdlinePattern :: Cmdline -> Text
cmdlinePattern CmdlineExCommand      = ":"
cmdlinePattern CmdlineForwardSearch  = "/"
cmdlinePattern CmdlineBackwardSearch = "\\?"
cmdlinePattern CmdlineInput          = "@"