packages feed

gogol-appstate-1.0.0: gen/Gogol/AppState/Internal/Product.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- |
-- Module      : Gogol.AppState.Internal.Product
-- Copyright   : (c) 2015-2025 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
--               Toni Cebrián <toni@tonicebrian.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Gogol.AppState.Internal.Product
  ( -- * GetResponse
    GetResponse (..),
    newGetResponse,

    -- * ListResponse
    ListResponse (..),
    newListResponse,

    -- * UpdateRequest
    UpdateRequest (..),
    newUpdateRequest,

    -- * WriteResult
    WriteResult (..),
    newWriteResult,
  )
where

import Gogol.AppState.Internal.Sum
import Gogol.Prelude qualified as Core

-- | This is a JSON template for an app state resource.
--
-- /See:/ 'newGetResponse' smart constructor.
data GetResponse = GetResponse
  { -- | The current app state version.
    currentStateVersion :: (Core.Maybe Core.Text),
    -- | The requested data.
    data' :: (Core.Maybe Core.Text),
    -- | Uniquely identifies the type of this resource. Value is always the fixed string appstate#getResponse.
    kind :: Core.Text,
    -- | The key for the data.
    stateKey :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetResponse' with the minimum fields required to make a request.
newGetResponse ::
  GetResponse
newGetResponse =
  GetResponse
    { currentStateVersion = Core.Nothing,
      data' = Core.Nothing,
      kind = "appstate#getResponse",
      stateKey = Core.Nothing
    }

instance Core.FromJSON GetResponse where
  parseJSON =
    Core.withObject
      "GetResponse"
      ( \o ->
          GetResponse
            Core.<$> (o Core..:? "currentStateVersion")
            Core.<*> (o Core..:? "data")
            Core.<*> (o Core..:? "kind" Core..!= "appstate#getResponse")
            Core.<*> (o Core..:? "stateKey")
      )

instance Core.ToJSON GetResponse where
  toJSON GetResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("currentStateVersion" Core..=) Core.<$> currentStateVersion,
            ("data" Core..=) Core.<$> data',
            Core.Just ("kind" Core..= kind),
            ("stateKey" Core..=) Core.<$> stateKey
          ]
      )

-- | This is a JSON template to convert a list-response for app state.
--
-- /See:/ 'newListResponse' smart constructor.
data ListResponse = ListResponse
  { -- | The app state data.
    items :: (Core.Maybe [GetResponse]),
    -- | Uniquely identifies the type of this resource. Value is always the fixed string appstate#listResponse.
    kind :: Core.Text,
    -- | The maximum number of keys allowed for this user.
    maximumKeyCount :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListResponse' with the minimum fields required to make a request.
newListResponse ::
  ListResponse
newListResponse =
  ListResponse
    { items = Core.Nothing,
      kind = "appstate#listResponse",
      maximumKeyCount = Core.Nothing
    }

instance Core.FromJSON ListResponse where
  parseJSON =
    Core.withObject
      "ListResponse"
      ( \o ->
          ListResponse
            Core.<$> (o Core..:? "items")
            Core.<*> (o Core..:? "kind" Core..!= "appstate#listResponse")
            Core.<*> (o Core..:? "maximumKeyCount")
      )

instance Core.ToJSON ListResponse where
  toJSON ListResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("items" Core..=) Core.<$> items,
            Core.Just ("kind" Core..= kind),
            ("maximumKeyCount" Core..=) Core.<$> maximumKeyCount
          ]
      )

-- | This is a JSON template for a requests which update app state
--
-- /See:/ 'newUpdateRequest' smart constructor.
data UpdateRequest = UpdateRequest
  { -- | The new app state data that your application is trying to update with.
    data' :: (Core.Maybe Core.Text),
    -- | Uniquely identifies the type of this resource. Value is always the fixed string appstate#updateRequest.
    kind :: Core.Text
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpdateRequest' with the minimum fields required to make a request.
newUpdateRequest ::
  UpdateRequest
newUpdateRequest =
  UpdateRequest
    { data' = Core.Nothing,
      kind = "appstate#updateRequest"
    }

instance Core.FromJSON UpdateRequest where
  parseJSON =
    Core.withObject
      "UpdateRequest"
      ( \o ->
          UpdateRequest
            Core.<$> (o Core..:? "data")
            Core.<*> (o Core..:? "kind" Core..!= "appstate#updateRequest")
      )

instance Core.ToJSON UpdateRequest where
  toJSON UpdateRequest {..} =
    Core.object
      ( Core.catMaybes
          [("data" Core..=) Core.<$> data', Core.Just ("kind" Core..= kind)]
      )

-- | This is a JSON template for an app state write result.
--
-- /See:/ 'newWriteResult' smart constructor.
data WriteResult = WriteResult
  { -- | The version of the data for this key on the server.
    currentStateVersion :: (Core.Maybe Core.Text),
    -- | Uniquely identifies the type of this resource. Value is always the fixed string appstate#writeResult.
    kind :: Core.Text,
    -- | The written key.
    stateKey :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WriteResult' with the minimum fields required to make a request.
newWriteResult ::
  WriteResult
newWriteResult =
  WriteResult
    { currentStateVersion = Core.Nothing,
      kind = "appstate#writeResult",
      stateKey = Core.Nothing
    }

instance Core.FromJSON WriteResult where
  parseJSON =
    Core.withObject
      "WriteResult"
      ( \o ->
          WriteResult
            Core.<$> (o Core..:? "currentStateVersion")
            Core.<*> (o Core..:? "kind" Core..!= "appstate#writeResult")
            Core.<*> (o Core..:? "stateKey")
      )

instance Core.ToJSON WriteResult where
  toJSON WriteResult {..} =
    Core.object
      ( Core.catMaybes
          [ ("currentStateVersion" Core..=) Core.<$> currentStateVersion,
            Core.Just ("kind" Core..= kind),
            ("stateKey" Core..=) Core.<$> stateKey
          ]
      )