diff options
-rw-r--r-- | pager.cabal | 18 | ||||
-rw-r--r-- | src/Pager/Types.hs | 32 |
2 files changed, 50 insertions, 0 deletions
diff --git a/pager.cabal b/pager.cabal new file mode 100644 index 0000000..b3df3c3 --- /dev/null +++ b/pager.cabal @@ -0,0 +1,18 @@ +cabal-version: 2.4 + +name: pager +version: 1.0.0 +license: MIT +author: tv <tv@krebsco.de> +maintainer: tv@krebsco.de +build-type: Simple + +library + build-depends: base + , aeson + , template-haskell + , text + default-language: Haskell2010 + exposed-modules: Pager.Types + ghc-options: -O2 -Wall + hs-source-dirs: src diff --git a/src/Pager/Types.hs b/src/Pager/Types.hs new file mode 100644 index 0000000..95dd837 --- /dev/null +++ b/src/Pager/Types.hs @@ -0,0 +1,32 @@ +{-# LANGUAGE TemplateHaskell #-} +module Pager.Types where + +import Data.Aeson.TH (Options(fieldLabelModifier), deriveJSON, defaultOptions) +import Data.Text (Text) + + +data Geometry = Geometry + { geometry_x :: Int + , geometry_y :: Int + , geometry_width :: Int + , geometry_height :: Int + } + +data Window = Window + { window_id :: Int + , window_title :: Text + , window_geometry :: Geometry + , window_focused :: Bool + , window_urgent :: Bool + } + +data Workspace = Workspace + { workspace_geometry :: Geometry + , workspace_focused :: Bool + , workspace_name :: Text + , workspace_windows :: [Window] + } + +$(deriveJSON defaultOptions { fieldLabelModifier = tail . dropWhile (/='_') } ''Geometry) +$(deriveJSON defaultOptions { fieldLabelModifier = tail . dropWhile (/='_') } ''Window) +$(deriveJSON defaultOptions { fieldLabelModifier = tail . dropWhile (/='_') } ''Workspace) |