{-# 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.WorkMail.Types.MobileDeviceAccessRule
-- 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.WorkMail.Types.MobileDeviceAccessRule where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.WorkMail.Types.MobileDeviceAccessRuleEffect

-- | A rule that controls access to mobile devices for an WorkMail group.
--
-- /See:/ 'newMobileDeviceAccessRule' smart constructor.
data MobileDeviceAccessRule = MobileDeviceAccessRule'
  { -- | The date and time at which an access rule was created.
    MobileDeviceAccessRule -> Maybe POSIX
dateCreated :: Prelude.Maybe Data.POSIX,
    -- | The date and time at which an access rule was modified.
    MobileDeviceAccessRule -> Maybe POSIX
dateModified :: Prelude.Maybe Data.POSIX,
    -- | The description of a mobile access rule.
    MobileDeviceAccessRule -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Device models that a rule will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceModels :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device operating systems that a rule will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceOperatingSystems :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device types that a rule will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device user agents that a rule will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceUserAgents :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | The effect of the rule when it matches. Allowed values are @ALLOW@ or
    -- @DENY@.
    MobileDeviceAccessRule -> Maybe MobileDeviceAccessRuleEffect
effect :: Prelude.Maybe MobileDeviceAccessRuleEffect,
    -- | The ID assigned to a mobile access rule.
    MobileDeviceAccessRule -> Maybe Text
mobileDeviceAccessRuleId :: Prelude.Maybe Prelude.Text,
    -- | The name of a mobile access rule.
    MobileDeviceAccessRule -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | Device models that a rule __will not__ match. All other device models
    -- will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceModels :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device operating systems that a rule __will not__ match. All other
    -- device types will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceOperatingSystems :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device types that a rule __will not__ match. All other device types will
    -- match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | Device user agents that a rule __will not__ match. All other device user
    -- agents will match.
    MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceUserAgents :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
  }
  deriving (MobileDeviceAccessRule -> MobileDeviceAccessRule -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MobileDeviceAccessRule -> MobileDeviceAccessRule -> Bool
$c/= :: MobileDeviceAccessRule -> MobileDeviceAccessRule -> Bool
== :: MobileDeviceAccessRule -> MobileDeviceAccessRule -> Bool
$c== :: MobileDeviceAccessRule -> MobileDeviceAccessRule -> Bool
Prelude.Eq, ReadPrec [MobileDeviceAccessRule]
ReadPrec MobileDeviceAccessRule
Int -> ReadS MobileDeviceAccessRule
ReadS [MobileDeviceAccessRule]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MobileDeviceAccessRule]
$creadListPrec :: ReadPrec [MobileDeviceAccessRule]
readPrec :: ReadPrec MobileDeviceAccessRule
$creadPrec :: ReadPrec MobileDeviceAccessRule
readList :: ReadS [MobileDeviceAccessRule]
$creadList :: ReadS [MobileDeviceAccessRule]
readsPrec :: Int -> ReadS MobileDeviceAccessRule
$creadsPrec :: Int -> ReadS MobileDeviceAccessRule
Prelude.Read, Int -> MobileDeviceAccessRule -> ShowS
[MobileDeviceAccessRule] -> ShowS
MobileDeviceAccessRule -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MobileDeviceAccessRule] -> ShowS
$cshowList :: [MobileDeviceAccessRule] -> ShowS
show :: MobileDeviceAccessRule -> String
$cshow :: MobileDeviceAccessRule -> String
showsPrec :: Int -> MobileDeviceAccessRule -> ShowS
$cshowsPrec :: Int -> MobileDeviceAccessRule -> ShowS
Prelude.Show, forall x. Rep MobileDeviceAccessRule x -> MobileDeviceAccessRule
forall x. MobileDeviceAccessRule -> Rep MobileDeviceAccessRule x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MobileDeviceAccessRule x -> MobileDeviceAccessRule
$cfrom :: forall x. MobileDeviceAccessRule -> Rep MobileDeviceAccessRule x
Prelude.Generic)

-- |
-- Create a value of 'MobileDeviceAccessRule' 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:
--
-- 'dateCreated', 'mobileDeviceAccessRule_dateCreated' - The date and time at which an access rule was created.
--
-- 'dateModified', 'mobileDeviceAccessRule_dateModified' - The date and time at which an access rule was modified.
--
-- 'description', 'mobileDeviceAccessRule_description' - The description of a mobile access rule.
--
-- 'deviceModels', 'mobileDeviceAccessRule_deviceModels' - Device models that a rule will match.
--
-- 'deviceOperatingSystems', 'mobileDeviceAccessRule_deviceOperatingSystems' - Device operating systems that a rule will match.
--
-- 'deviceTypes', 'mobileDeviceAccessRule_deviceTypes' - Device types that a rule will match.
--
-- 'deviceUserAgents', 'mobileDeviceAccessRule_deviceUserAgents' - Device user agents that a rule will match.
--
-- 'effect', 'mobileDeviceAccessRule_effect' - The effect of the rule when it matches. Allowed values are @ALLOW@ or
-- @DENY@.
--
-- 'mobileDeviceAccessRuleId', 'mobileDeviceAccessRule_mobileDeviceAccessRuleId' - The ID assigned to a mobile access rule.
--
-- 'name', 'mobileDeviceAccessRule_name' - The name of a mobile access rule.
--
-- 'notDeviceModels', 'mobileDeviceAccessRule_notDeviceModels' - Device models that a rule __will not__ match. All other device models
-- will match.
--
-- 'notDeviceOperatingSystems', 'mobileDeviceAccessRule_notDeviceOperatingSystems' - Device operating systems that a rule __will not__ match. All other
-- device types will match.
--
-- 'notDeviceTypes', 'mobileDeviceAccessRule_notDeviceTypes' - Device types that a rule __will not__ match. All other device types will
-- match.
--
-- 'notDeviceUserAgents', 'mobileDeviceAccessRule_notDeviceUserAgents' - Device user agents that a rule __will not__ match. All other device user
-- agents will match.
newMobileDeviceAccessRule ::
  MobileDeviceAccessRule
newMobileDeviceAccessRule :: MobileDeviceAccessRule
newMobileDeviceAccessRule =
  MobileDeviceAccessRule'
    { $sel:dateCreated:MobileDeviceAccessRule' :: Maybe POSIX
dateCreated =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dateModified:MobileDeviceAccessRule' :: Maybe POSIX
dateModified = forall a. Maybe a
Prelude.Nothing,
      $sel:description:MobileDeviceAccessRule' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:deviceModels:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceModels = forall a. Maybe a
Prelude.Nothing,
      $sel:deviceOperatingSystems:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceOperatingSystems = forall a. Maybe a
Prelude.Nothing,
      $sel:deviceTypes:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:deviceUserAgents:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceUserAgents = forall a. Maybe a
Prelude.Nothing,
      $sel:effect:MobileDeviceAccessRule' :: Maybe MobileDeviceAccessRuleEffect
effect = forall a. Maybe a
Prelude.Nothing,
      $sel:mobileDeviceAccessRuleId:MobileDeviceAccessRule' :: Maybe Text
mobileDeviceAccessRuleId = forall a. Maybe a
Prelude.Nothing,
      $sel:name:MobileDeviceAccessRule' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:notDeviceModels:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceModels = forall a. Maybe a
Prelude.Nothing,
      $sel:notDeviceOperatingSystems:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceOperatingSystems = forall a. Maybe a
Prelude.Nothing,
      $sel:notDeviceTypes:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:notDeviceUserAgents:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceUserAgents = forall a. Maybe a
Prelude.Nothing
    }

-- | The date and time at which an access rule was created.
mobileDeviceAccessRule_dateCreated :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe Prelude.UTCTime)
mobileDeviceAccessRule_dateCreated :: Lens' MobileDeviceAccessRule (Maybe UTCTime)
mobileDeviceAccessRule_dateCreated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe POSIX
dateCreated :: Maybe POSIX
$sel:dateCreated:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
dateCreated} -> Maybe POSIX
dateCreated) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe POSIX
a -> MobileDeviceAccessRule
s {$sel:dateCreated:MobileDeviceAccessRule' :: Maybe POSIX
dateCreated = Maybe POSIX
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The date and time at which an access rule was modified.
mobileDeviceAccessRule_dateModified :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe Prelude.UTCTime)
mobileDeviceAccessRule_dateModified :: Lens' MobileDeviceAccessRule (Maybe UTCTime)
mobileDeviceAccessRule_dateModified = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe POSIX
dateModified :: Maybe POSIX
$sel:dateModified:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
dateModified} -> Maybe POSIX
dateModified) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe POSIX
a -> MobileDeviceAccessRule
s {$sel:dateModified:MobileDeviceAccessRule' :: Maybe POSIX
dateModified = Maybe POSIX
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The description of a mobile access rule.
mobileDeviceAccessRule_description :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe Prelude.Text)
mobileDeviceAccessRule_description :: Lens' MobileDeviceAccessRule (Maybe Text)
mobileDeviceAccessRule_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe Text
description :: Maybe Text
$sel:description:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
description} -> Maybe Text
description) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe Text
a -> MobileDeviceAccessRule
s {$sel:description:MobileDeviceAccessRule' :: Maybe Text
description = Maybe Text
a} :: MobileDeviceAccessRule)

-- | Device models that a rule will match.
mobileDeviceAccessRule_deviceModels :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_deviceModels :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_deviceModels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
deviceModels :: Maybe (NonEmpty Text)
$sel:deviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceModels} -> Maybe (NonEmpty Text)
deviceModels) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:deviceModels:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceModels = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device operating systems that a rule will match.
mobileDeviceAccessRule_deviceOperatingSystems :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_deviceOperatingSystems :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_deviceOperatingSystems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
deviceOperatingSystems :: Maybe (NonEmpty Text)
$sel:deviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceOperatingSystems} -> Maybe (NonEmpty Text)
deviceOperatingSystems) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:deviceOperatingSystems:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceOperatingSystems = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device types that a rule will match.
mobileDeviceAccessRule_deviceTypes :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_deviceTypes :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_deviceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
deviceTypes :: Maybe (NonEmpty Text)
$sel:deviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceTypes} -> Maybe (NonEmpty Text)
deviceTypes) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:deviceTypes:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceTypes = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device user agents that a rule will match.
mobileDeviceAccessRule_deviceUserAgents :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_deviceUserAgents :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_deviceUserAgents = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
deviceUserAgents :: Maybe (NonEmpty Text)
$sel:deviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
deviceUserAgents} -> Maybe (NonEmpty Text)
deviceUserAgents) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:deviceUserAgents:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
deviceUserAgents = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The effect of the rule when it matches. Allowed values are @ALLOW@ or
-- @DENY@.
mobileDeviceAccessRule_effect :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe MobileDeviceAccessRuleEffect)
mobileDeviceAccessRule_effect :: Lens' MobileDeviceAccessRule (Maybe MobileDeviceAccessRuleEffect)
mobileDeviceAccessRule_effect = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe MobileDeviceAccessRuleEffect
effect :: Maybe MobileDeviceAccessRuleEffect
$sel:effect:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe MobileDeviceAccessRuleEffect
effect} -> Maybe MobileDeviceAccessRuleEffect
effect) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe MobileDeviceAccessRuleEffect
a -> MobileDeviceAccessRule
s {$sel:effect:MobileDeviceAccessRule' :: Maybe MobileDeviceAccessRuleEffect
effect = Maybe MobileDeviceAccessRuleEffect
a} :: MobileDeviceAccessRule)

-- | The ID assigned to a mobile access rule.
mobileDeviceAccessRule_mobileDeviceAccessRuleId :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe Prelude.Text)
mobileDeviceAccessRule_mobileDeviceAccessRuleId :: Lens' MobileDeviceAccessRule (Maybe Text)
mobileDeviceAccessRule_mobileDeviceAccessRuleId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe Text
mobileDeviceAccessRuleId :: Maybe Text
$sel:mobileDeviceAccessRuleId:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
mobileDeviceAccessRuleId} -> Maybe Text
mobileDeviceAccessRuleId) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe Text
a -> MobileDeviceAccessRule
s {$sel:mobileDeviceAccessRuleId:MobileDeviceAccessRule' :: Maybe Text
mobileDeviceAccessRuleId = Maybe Text
a} :: MobileDeviceAccessRule)

-- | The name of a mobile access rule.
mobileDeviceAccessRule_name :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe Prelude.Text)
mobileDeviceAccessRule_name :: Lens' MobileDeviceAccessRule (Maybe Text)
mobileDeviceAccessRule_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe Text
name :: Maybe Text
$sel:name:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
name} -> Maybe Text
name) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe Text
a -> MobileDeviceAccessRule
s {$sel:name:MobileDeviceAccessRule' :: Maybe Text
name = Maybe Text
a} :: MobileDeviceAccessRule)

-- | Device models that a rule __will not__ match. All other device models
-- will match.
mobileDeviceAccessRule_notDeviceModels :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_notDeviceModels :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_notDeviceModels = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
notDeviceModels :: Maybe (NonEmpty Text)
$sel:notDeviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceModels} -> Maybe (NonEmpty Text)
notDeviceModels) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:notDeviceModels:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceModels = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device operating systems that a rule __will not__ match. All other
-- device types will match.
mobileDeviceAccessRule_notDeviceOperatingSystems :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_notDeviceOperatingSystems :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_notDeviceOperatingSystems = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
notDeviceOperatingSystems :: Maybe (NonEmpty Text)
$sel:notDeviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceOperatingSystems} -> Maybe (NonEmpty Text)
notDeviceOperatingSystems) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:notDeviceOperatingSystems:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceOperatingSystems = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device types that a rule __will not__ match. All other device types will
-- match.
mobileDeviceAccessRule_notDeviceTypes :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_notDeviceTypes :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_notDeviceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
notDeviceTypes :: Maybe (NonEmpty Text)
$sel:notDeviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceTypes} -> Maybe (NonEmpty Text)
notDeviceTypes) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:notDeviceTypes:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceTypes = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Device user agents that a rule __will not__ match. All other device user
-- agents will match.
mobileDeviceAccessRule_notDeviceUserAgents :: Lens.Lens' MobileDeviceAccessRule (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
mobileDeviceAccessRule_notDeviceUserAgents :: Lens' MobileDeviceAccessRule (Maybe (NonEmpty Text))
mobileDeviceAccessRule_notDeviceUserAgents = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MobileDeviceAccessRule' {Maybe (NonEmpty Text)
notDeviceUserAgents :: Maybe (NonEmpty Text)
$sel:notDeviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
notDeviceUserAgents} -> Maybe (NonEmpty Text)
notDeviceUserAgents) (\s :: MobileDeviceAccessRule
s@MobileDeviceAccessRule' {} Maybe (NonEmpty Text)
a -> MobileDeviceAccessRule
s {$sel:notDeviceUserAgents:MobileDeviceAccessRule' :: Maybe (NonEmpty Text)
notDeviceUserAgents = Maybe (NonEmpty Text)
a} :: MobileDeviceAccessRule) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromJSON MobileDeviceAccessRule where
  parseJSON :: Value -> Parser MobileDeviceAccessRule
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"MobileDeviceAccessRule"
      ( \Object
x ->
          Maybe POSIX
-> Maybe POSIX
-> Maybe Text
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> Maybe MobileDeviceAccessRuleEffect
-> Maybe Text
-> Maybe Text
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> Maybe (NonEmpty Text)
-> MobileDeviceAccessRule
MobileDeviceAccessRule'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DateCreated")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DateModified")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Description")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DeviceModels")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DeviceOperatingSystems")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DeviceTypes")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"DeviceUserAgents")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Effect")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MobileDeviceAccessRuleId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"NotDeviceModels")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"NotDeviceOperatingSystems")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"NotDeviceTypes")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"NotDeviceUserAgents")
      )

instance Prelude.Hashable MobileDeviceAccessRule where
  hashWithSalt :: Int -> MobileDeviceAccessRule -> Int
hashWithSalt Int
_salt MobileDeviceAccessRule' {Maybe (NonEmpty Text)
Maybe Text
Maybe POSIX
Maybe MobileDeviceAccessRuleEffect
notDeviceUserAgents :: Maybe (NonEmpty Text)
notDeviceTypes :: Maybe (NonEmpty Text)
notDeviceOperatingSystems :: Maybe (NonEmpty Text)
notDeviceModels :: Maybe (NonEmpty Text)
name :: Maybe Text
mobileDeviceAccessRuleId :: Maybe Text
effect :: Maybe MobileDeviceAccessRuleEffect
deviceUserAgents :: Maybe (NonEmpty Text)
deviceTypes :: Maybe (NonEmpty Text)
deviceOperatingSystems :: Maybe (NonEmpty Text)
deviceModels :: Maybe (NonEmpty Text)
description :: Maybe Text
dateModified :: Maybe POSIX
dateCreated :: Maybe POSIX
$sel:notDeviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:name:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:mobileDeviceAccessRuleId:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:effect:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe MobileDeviceAccessRuleEffect
$sel:deviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:description:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:dateModified:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
$sel:dateCreated:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
dateCreated
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
dateModified
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
deviceModels
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
deviceOperatingSystems
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
deviceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
deviceUserAgents
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MobileDeviceAccessRuleEffect
effect
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
mobileDeviceAccessRuleId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
notDeviceModels
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
notDeviceOperatingSystems
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
notDeviceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty Text)
notDeviceUserAgents

instance Prelude.NFData MobileDeviceAccessRule where
  rnf :: MobileDeviceAccessRule -> ()
rnf MobileDeviceAccessRule' {Maybe (NonEmpty Text)
Maybe Text
Maybe POSIX
Maybe MobileDeviceAccessRuleEffect
notDeviceUserAgents :: Maybe (NonEmpty Text)
notDeviceTypes :: Maybe (NonEmpty Text)
notDeviceOperatingSystems :: Maybe (NonEmpty Text)
notDeviceModels :: Maybe (NonEmpty Text)
name :: Maybe Text
mobileDeviceAccessRuleId :: Maybe Text
effect :: Maybe MobileDeviceAccessRuleEffect
deviceUserAgents :: Maybe (NonEmpty Text)
deviceTypes :: Maybe (NonEmpty Text)
deviceOperatingSystems :: Maybe (NonEmpty Text)
deviceModels :: Maybe (NonEmpty Text)
description :: Maybe Text
dateModified :: Maybe POSIX
dateCreated :: Maybe POSIX
$sel:notDeviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:notDeviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:name:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:mobileDeviceAccessRuleId:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:effect:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe MobileDeviceAccessRuleEffect
$sel:deviceUserAgents:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceTypes:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceOperatingSystems:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:deviceModels:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe (NonEmpty Text)
$sel:description:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe Text
$sel:dateModified:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
$sel:dateCreated:MobileDeviceAccessRule' :: MobileDeviceAccessRule -> Maybe POSIX
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
dateCreated
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
dateModified
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
deviceModels
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
deviceOperatingSystems
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
deviceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
deviceUserAgents
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MobileDeviceAccessRuleEffect
effect
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
mobileDeviceAccessRuleId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
notDeviceModels
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
notDeviceOperatingSystems
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
notDeviceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty Text)
notDeviceUserAgents