module Chiasma.Data.TmuxRequest where

import qualified Data.Text as Text
import Chiasma.Data.TmuxQuery (TmuxQuery (TmuxQuery))

data TmuxRequest =
  TmuxRequest {
    TmuxRequest -> Text
cmd :: Text,
    TmuxRequest -> [Text]
args :: [Text],
    TmuxRequest -> Maybe TmuxQuery
query :: Maybe TmuxQuery
  }
  deriving stock (TmuxRequest -> TmuxRequest -> Bool
(TmuxRequest -> TmuxRequest -> Bool)
-> (TmuxRequest -> TmuxRequest -> Bool) -> Eq TmuxRequest
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TmuxRequest -> TmuxRequest -> Bool
$c/= :: TmuxRequest -> TmuxRequest -> Bool
== :: TmuxRequest -> TmuxRequest -> Bool
$c== :: TmuxRequest -> TmuxRequest -> Bool
Eq, Int -> TmuxRequest -> ShowS
[TmuxRequest] -> ShowS
TmuxRequest -> String
(Int -> TmuxRequest -> ShowS)
-> (TmuxRequest -> String)
-> ([TmuxRequest] -> ShowS)
-> Show TmuxRequest
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TmuxRequest] -> ShowS
$cshowList :: [TmuxRequest] -> ShowS
show :: TmuxRequest -> String
$cshow :: TmuxRequest -> String
showsPrec :: Int -> TmuxRequest -> ShowS
$cshowsPrec :: Int -> TmuxRequest -> ShowS
Show)

queryArgs :: TmuxQuery -> [Text]
queryArgs :: TmuxQuery -> [Text]
queryArgs (TmuxQuery Text
q) =
  [Item [Text]
"-F", Item [Text]
"'", Text
Item [Text]
q, Item [Text]
"'"]

cmdline :: TmuxRequest -> [Text]
cmdline :: TmuxRequest -> [Text]
cmdline TmuxRequest { [Text]
Maybe TmuxQuery
Text
query :: Maybe TmuxQuery
args :: [Text]
cmd :: Text
$sel:query:TmuxRequest :: TmuxRequest -> Maybe TmuxQuery
$sel:args:TmuxRequest :: TmuxRequest -> [Text]
$sel:cmd:TmuxRequest :: TmuxRequest -> Text
..} =
  Text
cmd Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
: [Text]
args [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
++ (TmuxQuery -> [Text]) -> Maybe TmuxQuery -> [Text]
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap TmuxQuery -> [Text]
queryArgs Maybe TmuxQuery
query [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
++ [Item [Text]
"\n"]

encode :: TmuxRequest -> ByteString
encode :: TmuxRequest -> ByteString
encode TmuxRequest
req =
  Text -> ByteString
forall a b. ConvertUtf8 a b => a -> b
encodeUtf8 ([Text] -> Text
Text.unwords (TmuxRequest -> [Text]
cmdline TmuxRequest
req))