packages feed

amazonka-pinpoint-2.0: gen/Amazonka/Pinpoint/Types/SegmentDemographics.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Pinpoint.Types.SegmentDemographics
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Pinpoint.Types.SegmentDemographics where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Pinpoint.Types.SetDimension
import qualified Amazonka.Prelude as Prelude

-- | Specifies demographic-based dimension settings for including or
-- excluding endpoints from a segment. These settings derive from
-- characteristics of endpoint devices, such as platform, make, and model.
--
-- /See:/ 'newSegmentDemographics' smart constructor.
data SegmentDemographics = SegmentDemographics'
  { -- | The app version criteria for the segment.
    appVersion :: Prelude.Maybe SetDimension,
    -- | The channel criteria for the segment.
    channel :: Prelude.Maybe SetDimension,
    -- | The device type criteria for the segment.
    deviceType :: Prelude.Maybe SetDimension,
    -- | The device make criteria for the segment.
    make :: Prelude.Maybe SetDimension,
    -- | The device model criteria for the segment.
    model :: Prelude.Maybe SetDimension,
    -- | The device platform criteria for the segment.
    platform :: Prelude.Maybe SetDimension
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'SegmentDemographics' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'appVersion', 'segmentDemographics_appVersion' - The app version criteria for the segment.
--
-- 'channel', 'segmentDemographics_channel' - The channel criteria for the segment.
--
-- 'deviceType', 'segmentDemographics_deviceType' - The device type criteria for the segment.
--
-- 'make', 'segmentDemographics_make' - The device make criteria for the segment.
--
-- 'model', 'segmentDemographics_model' - The device model criteria for the segment.
--
-- 'platform', 'segmentDemographics_platform' - The device platform criteria for the segment.
newSegmentDemographics ::
  SegmentDemographics
newSegmentDemographics =
  SegmentDemographics'
    { appVersion = Prelude.Nothing,
      channel = Prelude.Nothing,
      deviceType = Prelude.Nothing,
      make = Prelude.Nothing,
      model = Prelude.Nothing,
      platform = Prelude.Nothing
    }

-- | The app version criteria for the segment.
segmentDemographics_appVersion :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_appVersion = Lens.lens (\SegmentDemographics' {appVersion} -> appVersion) (\s@SegmentDemographics' {} a -> s {appVersion = a} :: SegmentDemographics)

-- | The channel criteria for the segment.
segmentDemographics_channel :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_channel = Lens.lens (\SegmentDemographics' {channel} -> channel) (\s@SegmentDemographics' {} a -> s {channel = a} :: SegmentDemographics)

-- | The device type criteria for the segment.
segmentDemographics_deviceType :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_deviceType = Lens.lens (\SegmentDemographics' {deviceType} -> deviceType) (\s@SegmentDemographics' {} a -> s {deviceType = a} :: SegmentDemographics)

-- | The device make criteria for the segment.
segmentDemographics_make :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_make = Lens.lens (\SegmentDemographics' {make} -> make) (\s@SegmentDemographics' {} a -> s {make = a} :: SegmentDemographics)

-- | The device model criteria for the segment.
segmentDemographics_model :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_model = Lens.lens (\SegmentDemographics' {model} -> model) (\s@SegmentDemographics' {} a -> s {model = a} :: SegmentDemographics)

-- | The device platform criteria for the segment.
segmentDemographics_platform :: Lens.Lens' SegmentDemographics (Prelude.Maybe SetDimension)
segmentDemographics_platform = Lens.lens (\SegmentDemographics' {platform} -> platform) (\s@SegmentDemographics' {} a -> s {platform = a} :: SegmentDemographics)

instance Data.FromJSON SegmentDemographics where
  parseJSON =
    Data.withObject
      "SegmentDemographics"
      ( \x ->
          SegmentDemographics'
            Prelude.<$> (x Data..:? "AppVersion")
            Prelude.<*> (x Data..:? "Channel")
            Prelude.<*> (x Data..:? "DeviceType")
            Prelude.<*> (x Data..:? "Make")
            Prelude.<*> (x Data..:? "Model")
            Prelude.<*> (x Data..:? "Platform")
      )

instance Prelude.Hashable SegmentDemographics where
  hashWithSalt _salt SegmentDemographics' {..} =
    _salt
      `Prelude.hashWithSalt` appVersion
      `Prelude.hashWithSalt` channel
      `Prelude.hashWithSalt` deviceType
      `Prelude.hashWithSalt` make
      `Prelude.hashWithSalt` model
      `Prelude.hashWithSalt` platform

instance Prelude.NFData SegmentDemographics where
  rnf SegmentDemographics' {..} =
    Prelude.rnf appVersion
      `Prelude.seq` Prelude.rnf channel
      `Prelude.seq` Prelude.rnf deviceType
      `Prelude.seq` Prelude.rnf make
      `Prelude.seq` Prelude.rnf model
      `Prelude.seq` Prelude.rnf platform

instance Data.ToJSON SegmentDemographics where
  toJSON SegmentDemographics' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("AppVersion" Data..=) Prelude.<$> appVersion,
            ("Channel" Data..=) Prelude.<$> channel,
            ("DeviceType" Data..=) Prelude.<$> deviceType,
            ("Make" Data..=) Prelude.<$> make,
            ("Model" Data..=) Prelude.<$> model,
            ("Platform" Data..=) Prelude.<$> platform
          ]
      )