module TD.Data.SessionDeviceType
  (SessionDeviceType(..)) where

import qualified Data.Aeson as A
import qualified Data.Aeson.Types as AT
import qualified TD.Lib.Internal as I

-- | Represents the type of device from which session was created
data SessionDeviceType
  = SessionDeviceTypeAndroid -- ^ The session is running on an Android device
  | SessionDeviceTypeApple -- ^ The session is running on a generic Apple device
  | SessionDeviceTypeBrave -- ^ The session is running on the Brave browser
  | SessionDeviceTypeChrome -- ^ The session is running on the Chrome browser
  | SessionDeviceTypeEdge -- ^ The session is running on the Edge browser
  | SessionDeviceTypeFirefox -- ^ The session is running on the Firefox browser
  | SessionDeviceTypeIpad -- ^ The session is running on an iPad device
  | SessionDeviceTypeIphone -- ^ The session is running on an iPhone device
  | SessionDeviceTypeLinux -- ^ The session is running on a Linux device
  | SessionDeviceTypeMac -- ^ The session is running on a Mac device
  | SessionDeviceTypeOpera -- ^ The session is running on the Opera browser
  | SessionDeviceTypeSafari -- ^ The session is running on the Safari browser
  | SessionDeviceTypeUbuntu -- ^ The session is running on an Ubuntu device
  | SessionDeviceTypeUnknown -- ^ The session is running on an unknown type of device
  | SessionDeviceTypeVivaldi -- ^ The session is running on the Vivaldi browser
  | SessionDeviceTypeWindows -- ^ The session is running on a Windows device
  | SessionDeviceTypeXbox -- ^ The session is running on an Xbox console
  deriving (SessionDeviceType -> SessionDeviceType -> Bool
(SessionDeviceType -> SessionDeviceType -> Bool)
-> (SessionDeviceType -> SessionDeviceType -> Bool)
-> Eq SessionDeviceType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SessionDeviceType -> SessionDeviceType -> Bool
== :: SessionDeviceType -> SessionDeviceType -> Bool
$c/= :: SessionDeviceType -> SessionDeviceType -> Bool
/= :: SessionDeviceType -> SessionDeviceType -> Bool
Eq, Int -> SessionDeviceType -> ShowS
[SessionDeviceType] -> ShowS
SessionDeviceType -> String
(Int -> SessionDeviceType -> ShowS)
-> (SessionDeviceType -> String)
-> ([SessionDeviceType] -> ShowS)
-> Show SessionDeviceType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SessionDeviceType -> ShowS
showsPrec :: Int -> SessionDeviceType -> ShowS
$cshow :: SessionDeviceType -> String
show :: SessionDeviceType -> String
$cshowList :: [SessionDeviceType] -> ShowS
showList :: [SessionDeviceType] -> ShowS
Show)

instance I.ShortShow SessionDeviceType where
  shortShow :: SessionDeviceType -> String
shortShow SessionDeviceType
SessionDeviceTypeAndroid
      = String
"SessionDeviceTypeAndroid"
  shortShow SessionDeviceType
SessionDeviceTypeApple
      = String
"SessionDeviceTypeApple"
  shortShow SessionDeviceType
SessionDeviceTypeBrave
      = String
"SessionDeviceTypeBrave"
  shortShow SessionDeviceType
SessionDeviceTypeChrome
      = String
"SessionDeviceTypeChrome"
  shortShow SessionDeviceType
SessionDeviceTypeEdge
      = String
"SessionDeviceTypeEdge"
  shortShow SessionDeviceType
SessionDeviceTypeFirefox
      = String
"SessionDeviceTypeFirefox"
  shortShow SessionDeviceType
SessionDeviceTypeIpad
      = String
"SessionDeviceTypeIpad"
  shortShow SessionDeviceType
SessionDeviceTypeIphone
      = String
"SessionDeviceTypeIphone"
  shortShow SessionDeviceType
SessionDeviceTypeLinux
      = String
"SessionDeviceTypeLinux"
  shortShow SessionDeviceType
SessionDeviceTypeMac
      = String
"SessionDeviceTypeMac"
  shortShow SessionDeviceType
SessionDeviceTypeOpera
      = String
"SessionDeviceTypeOpera"
  shortShow SessionDeviceType
SessionDeviceTypeSafari
      = String
"SessionDeviceTypeSafari"
  shortShow SessionDeviceType
SessionDeviceTypeUbuntu
      = String
"SessionDeviceTypeUbuntu"
  shortShow SessionDeviceType
SessionDeviceTypeUnknown
      = String
"SessionDeviceTypeUnknown"
  shortShow SessionDeviceType
SessionDeviceTypeVivaldi
      = String
"SessionDeviceTypeVivaldi"
  shortShow SessionDeviceType
SessionDeviceTypeWindows
      = String
"SessionDeviceTypeWindows"
  shortShow SessionDeviceType
SessionDeviceTypeXbox
      = String
"SessionDeviceTypeXbox"

instance AT.FromJSON SessionDeviceType where
  parseJSON :: Value -> Parser SessionDeviceType
parseJSON (AT.Object Object
obj) = do
    String
t <- Object
obj Object -> Key -> Parser String
forall a. FromJSON a => Object -> Key -> Parser a
A..: Key
"@type" :: AT.Parser String

    case String
t of
      String
"sessionDeviceTypeAndroid" -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeAndroid
      String
"sessionDeviceTypeApple"   -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeApple
      String
"sessionDeviceTypeBrave"   -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeBrave
      String
"sessionDeviceTypeChrome"  -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeChrome
      String
"sessionDeviceTypeEdge"    -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeEdge
      String
"sessionDeviceTypeFirefox" -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeFirefox
      String
"sessionDeviceTypeIpad"    -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeIpad
      String
"sessionDeviceTypeIphone"  -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeIphone
      String
"sessionDeviceTypeLinux"   -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeLinux
      String
"sessionDeviceTypeMac"     -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeMac
      String
"sessionDeviceTypeOpera"   -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeOpera
      String
"sessionDeviceTypeSafari"  -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeSafari
      String
"sessionDeviceTypeUbuntu"  -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeUbuntu
      String
"sessionDeviceTypeUnknown" -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeUnknown
      String
"sessionDeviceTypeVivaldi" -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeVivaldi
      String
"sessionDeviceTypeWindows" -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeWindows
      String
"sessionDeviceTypeXbox"    -> SessionDeviceType -> Parser SessionDeviceType
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure SessionDeviceType
SessionDeviceTypeXbox
      String
_                          -> Parser SessionDeviceType
forall a. Monoid a => a
mempty
    
  parseJSON Value
_ = Parser SessionDeviceType
forall a. Monoid a => a
mempty