-- | This module is for configuration of the user object.
module LaunchDarkly.Server.User
( User
, makeUser
, userSetKey
, userSetSecondary
, userSetIP
, userSetCountry
, userSetEmail
, userSetFirstName
, userSetLastName
, userSetAvatar
, userSetName
, userSetAnonymous
, userSetCustom
, userSetPrivateAttributeNames
) where
import Data.Aeson (Value)
import Data.Generics.Product (setField)
import Data.HashMap.Strict (HashMap)
import Data.Set (Set)
import Data.Text (Text)
import LaunchDarkly.Server.User.Internal (User(..), mapUser, UserI(..))
-- | Creates a new user identified by the given key.
makeUser :: Text -> User
makeUser key = User $ UserI
{ key = pure key
, secondary = mempty
, ip = mempty
, country = mempty
, email = mempty
, firstName = mempty
, lastName = mempty
, avatar = mempty
, name = mempty
, anonymous = False
, custom = mempty
, privateAttributeNames = mempty
}
-- | Set the primary key for a user.
userSetKey :: (Maybe Text) -> User -> User
userSetKey = mapUser . setField @"key"
-- | Set the secondary key for a user.
userSetSecondary :: Maybe Text -> User -> User
userSetSecondary = mapUser . setField @"secondary"
-- | Set the IP for a user.
userSetIP :: Maybe Text -> User -> User
userSetIP = mapUser . setField @"ip"
-- | Set the country for a user.
userSetCountry :: Maybe Text -> User -> User
userSetCountry = mapUser . setField @"country"
-- | Set the email for a user.
userSetEmail :: Maybe Text -> User -> User
userSetEmail = mapUser . setField @"email"
-- | Set the first name for a user.
userSetFirstName :: Maybe Text -> User -> User
userSetFirstName = mapUser . setField @"firstName"
-- | Set the last name for a user.
userSetLastName :: Maybe Text -> User -> User
userSetLastName = mapUser . setField @"lastName"
-- | Set the avatar for a user.
userSetAvatar :: Maybe Text -> User -> User
userSetAvatar = mapUser . setField @"avatar"
-- | Set the name for a user.
userSetName :: Maybe Text -> User -> User
userSetName = mapUser . setField @"name"
-- | Set if the user is anonymous or not.
userSetAnonymous :: Bool -> User -> User
userSetAnonymous = mapUser . setField @"anonymous"
-- | Set custom fields for a user.
userSetCustom :: HashMap Text Value -> User -> User
userSetCustom = mapUser . setField @"custom"
-- | This contains list of attributes to keep private, whether they appear at
-- the top-level or Custom The attribute "key" is always sent regardless of
-- whether it is in this list, and "custom" cannot be used to eliminate all
-- custom attributes
userSetPrivateAttributeNames :: Set Text -> User -> User
userSetPrivateAttributeNames = mapUser . setField @"privateAttributeNames"