packages feed

marionette-1.1.0: src/Test/Marionette/Key.hs

module Test.Marionette.Key where

import Data.Aeson (ToJSON (..), Value (String))
import Data.Text qualified as Text
import Prelude hiding (Left, Right)

-- | Key values representing special keys and arbitrary characters, as defined in the
-- <https://www.w3.org/TR/webdriver/#keyboard-actions W3C WebDriver specification>.
data Key
    = Null
    | Cancel
    | Help
    | Backspace
    | Tab
    | Clear
    | Return
    | Enter
    | Shift
    | Control
    | Alt
    | Pause
    | Escape
    | Space
    | PageUp
    | PageDown
    | End
    | Home
    | Left
    | UpArrow
    | Right
    | DownArrow
    | Insert
    | Delete
    | Semicolon
    | Equals
    | Numpad0
    | Numpad1
    | Numpad2
    | Numpad3
    | Numpad4
    | Numpad5
    | Numpad6
    | Numpad7
    | Numpad8
    | Numpad9
    | Multiply
    | Add
    | Separator
    | Subtract
    | Decimal
    | Divide
    | F1
    | F2
    | F3
    | F4
    | F5
    | F6
    | F7
    | F8
    | F9
    | F10
    | F11
    | F12
    | Meta
    | ZenkakuHankaku
    | Key Char
    deriving stock (Show, Eq)

char :: Key -> Char
char Null = '\xE000'
char Cancel = '\xE001'
char Help = '\xE002'
char Backspace = '\xE003'
char Tab = '\xE004'
char Clear = '\xE005'
char Return = '\xE006'
char Enter = '\xE007'
char Shift = '\xE008'
char Control = '\xE009'
char Alt = '\xE00A'
char Pause = '\xE00B'
char Escape = '\xE00C'
char Space = '\xE00D'
char PageUp = '\xE00E'
char PageDown = '\xE00F'
char End = '\xE010'
char Home = '\xE011'
char Left = '\xE012'
char UpArrow = '\xE013'
char Right = '\xE014'
char DownArrow = '\xE015'
char Insert = '\xE016'
char Delete = '\xE017'
char Semicolon = '\xE018'
char Equals = '\xE019'
char Numpad0 = '\xE01A'
char Numpad1 = '\xE01B'
char Numpad2 = '\xE01C'
char Numpad3 = '\xE01D'
char Numpad4 = '\xE01E'
char Numpad5 = '\xE01F'
char Numpad6 = '\xE020'
char Numpad7 = '\xE021'
char Numpad8 = '\xE022'
char Numpad9 = '\xE023'
char Multiply = '\xE024'
char Add = '\xE025'
char Separator = '\xE026'
char Subtract = '\xE027'
char Decimal = '\xE028'
char Divide = '\xE029'
char F1 = '\xE031'
char F2 = '\xE032'
char F3 = '\xE033'
char F4 = '\xE034'
char F5 = '\xE035'
char F6 = '\xE036'
char F7 = '\xE037'
char F8 = '\xE038'
char F9 = '\xE039'
char F10 = '\xE03A'
char F11 = '\xE03B'
char F12 = '\xE03C'
char Meta = '\xE03D'
char ZenkakuHankaku = '\xE040'
char (Key c) = c

instance ToJSON Key where
    toJSON = String . Text.singleton . char