influxdb-0.9.1.2: src/Database/InfluxDB/Lens.hs
{-# 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' }