{-# LANGUAGE RankNTypes #-} module Database.InfluxDB.Lens ( Lens, Lens' -- * Lenses for 'Config' , credentials , httpManager -- * Lenses for 'Credentials' , user, password -- * Lenses for 'Server' , host, port, ssl ) where import Control.Applicative import Data.Text (Text) import Prelude import Network.HTTP.Client (Manager) import Database.InfluxDB.Http type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t type Lens' s a = Lens s s a a -- | User credentials for authentication credentials :: Lens' Config Credentials credentials f r = set <$> f (configCreds r) where set c = r { configCreds = c } -- | An instance of 'Manager' from @http-client@ package httpManager :: Lens' Config Manager httpManager f c = set <$> f (configHttpManager c) where set m = c { configHttpManager = m } -- | User name to be used for authentication user :: Lens' Credentials Text user f c = set <$> f (credsUser c) where set u = c { credsUser = u } -- | Password to be used for authentication password :: Lens' Credentials Text password f s = set <$> f (credsPassword s) where set p = s { credsPassword = p } -- | Host name or IP address of an InfluxDB host :: Lens' Server Text host f s = set <$> f (serverHost s) where set h = s { serverHost = h } -- | Port number to be used to connect to an InfluxDB port :: Lens' Server Int port f s = set <$> f (serverPort s) where set p = s { serverPort = p } -- | Whether or not to enable SSL connection ssl :: Lens' Server Bool ssl f s = set <$> f (serverSsl s) where set s' = s { serverSsl = s' }