{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Database.Bloodhound.Internal.Versions.Common.Types.PointInTime where

import Database.Bloodhound.Internal.Utils.Imports

data PointInTime = PointInTime
  { PointInTime -> Text
pointInTimeId :: Text,
    PointInTime -> Text
pointInTimeKeepAlive :: Text
  }
  deriving stock (PointInTime -> PointInTime -> Bool
(PointInTime -> PointInTime -> Bool)
-> (PointInTime -> PointInTime -> Bool) -> Eq PointInTime
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PointInTime -> PointInTime -> Bool
== :: PointInTime -> PointInTime -> Bool
$c/= :: PointInTime -> PointInTime -> Bool
/= :: PointInTime -> PointInTime -> Bool
Eq, Int -> PointInTime -> ShowS
[PointInTime] -> ShowS
PointInTime -> String
(Int -> PointInTime -> ShowS)
-> (PointInTime -> String)
-> ([PointInTime] -> ShowS)
-> Show PointInTime
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PointInTime -> ShowS
showsPrec :: Int -> PointInTime -> ShowS
$cshow :: PointInTime -> String
show :: PointInTime -> String
$cshowList :: [PointInTime] -> ShowS
showList :: [PointInTime] -> ShowS
Show)

instance ToJSON PointInTime where
  toJSON :: PointInTime -> Value
toJSON PointInTime {Text
pointInTimeId :: PointInTime -> Text
pointInTimeKeepAlive :: PointInTime -> Text
pointInTimeId :: Text
pointInTimeKeepAlive :: Text
..} =
    [Pair] -> Value
object
      [ Key
"id" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
pointInTimeId,
        Key
"keep_alive" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
pointInTimeKeepAlive
      ]

instance FromJSON PointInTime where
  parseJSON :: Value -> Parser PointInTime
parseJSON (Object Object
o) = Text -> Text -> PointInTime
PointInTime (Text -> Text -> PointInTime)
-> Parser Text -> Parser (Text -> PointInTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"id" Parser (Text -> PointInTime) -> Parser Text -> Parser PointInTime
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"keep_alive"
  parseJSON Value
x = String -> Value -> Parser PointInTime
forall a. String -> Value -> Parser a
typeMismatch String
"PointInTime" Value
x

pointInTimeIdLens :: Lens' PointInTime Text
pointInTimeIdLens :: Lens' PointInTime Text
pointInTimeIdLens = (PointInTime -> Text)
-> (PointInTime -> Text -> PointInTime) -> Lens' PointInTime Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PointInTime -> Text
pointInTimeId (\PointInTime
x Text
y -> PointInTime
x {pointInTimeId = y})

pointInTimeKeepAliveLens :: Lens' PointInTime Text
pointInTimeKeepAliveLens :: Lens' PointInTime Text
pointInTimeKeepAliveLens = (PointInTime -> Text)
-> (PointInTime -> Text -> PointInTime) -> Lens' PointInTime Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens PointInTime -> Text
pointInTimeKeepAlive (\PointInTime
x Text
y -> PointInTime
x {pointInTimeKeepAlive = y})