-- | 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"