on develop help sign in
Tweaking layout and top-level interface
8124131Brendan Hay
core/gogol-core.cabal+3−3
@@ -48,12 +48,12 @@ library
48 , bytestring >= 0.9
48 , bytestring >= 0.9
49 , conduit >= 1.1
49 , conduit >= 1.1
50 , dlist >= 0.7
50 , dlist >= 0.7
51− , case-insensitive
51+ , case-insensitive >= 1.2
52 , exceptions >= 0.6
52 , exceptions >= 0.6
53 , hashable >= 1.2
53 , hashable >= 1.2
54 , http-client >= 0.4.4
54 , http-client >= 0.4.4
55− , http-media >= 0.4
55+ , http-media >= 0.6
56− , http-types >= 0.8
56+ , http-types >= 0.8.6
57 , lens >= 4.4
57 , lens >= 4.4
58 , resourcet >= 1.1
58 , resourcet >= 1.1
59 , scientific >= 0.3
59 , scientific >= 0.3
core/src/Network/Google/Types.hs+4
@@ -22,6 +22,7 @@
22--
22--
23module Network.Google.Types where
23module Network.Google.Types where
24
24
25+import Control.Exception.Lens (exception)
25import Control.Lens hiding (coerce)
26import Control.Lens hiding (coerce)
26import Control.Monad
27import Control.Monad
27import Control.Monad.Catch
28import Control.Monad.Catch
@@ -142,6 +143,9 @@ class AsError a where
142 _SerializeError = _Error . _SerializeError
143 _SerializeError = _Error . _SerializeError
143 _ServiceError = _Error . _ServiceError
144 _ServiceError = _Error . _ServiceError
144
145
146+instance AsError SomeException where
147+ _Error = exception
148+
145instance AsError Error where
149instance AsError Error where
146 _Error = id
150 _Error = id
147
151
gogol/gogol.cabal+14−18
@@ -28,29 +28,25 @@ library
28
28
29 exposed-modules:
29 exposed-modules:
30 Network.Google
30 Network.Google
31− Network.Google.Auth
31+ , Network.Google.Auth
32− Network.Google.Env
32+ , Network.Google.Env
33
33
34 other-modules:
34 other-modules:
35 Network.Google.Internal.HTTP
35 Network.Google.Internal.HTTP
36− , Network.Google.Internal.Types
37
36
38 build-depends:
37 build-depends:
39 base >= 4.7 && < 5
38 base >= 4.7 && < 5
40− , bifunctors
41− , conduit
39+ , conduit >= 1.1
42 , data-default-class >= 0.0.1
40 , data-default-class >= 0.0.1
43− , exceptions
41+ , exceptions >= 0.6
44 , gogol-core == 0.0.1.*
42 , gogol-core == 0.0.1.*
45− , http-conduit
43+ , http-conduit >= 2.1.4
46− , http-media
44+ , http-media >= 0.6
47− , http-types
45+ , http-types >= 0.8.6
48− , lens
46+ , lens >= 4.4
49− , mmorph
50− , monad-control
47+ , monad-control >= 1
51− , mtl
48+ , mtl >= 2.1.3.1
52− , resourcet
49+ , resourcet >= 1.1
53− , text
50+ , text >= 1.1
54− , time
55− , transformers
51+ , transformers >= 0.2
56− , transformers-base
52+ , transformers-base >= 0.4
gogol/src/Network/Google.hs+16−9
@@ -17,16 +17,15 @@
17module Network.Google where
17module Network.Google where
18
18
19import Control.Applicative
19import Control.Applicative
20+import Control.Exception.Lens (throwingM)
20import Control.Monad
21import Control.Monad
21import Control.Monad.Base
22import Control.Monad.Base
22import Control.Monad.Catch
23import Control.Monad.Catch
23−import Control.Monad.IO.Class (MonadIO)
24import Control.Monad.Reader
24import Control.Monad.Reader
25import qualified Control.Monad.RWS.Lazy as LRW
25import qualified Control.Monad.RWS.Lazy as LRW
26import qualified Control.Monad.RWS.Strict as RW
26import qualified Control.Monad.RWS.Strict as RW
27import qualified Control.Monad.State.Lazy as LS
27import qualified Control.Monad.State.Lazy as LS
28import qualified Control.Monad.State.Strict as S
28import qualified Control.Monad.State.Strict as S
29−import Control.Monad.Trans.Class (lift)
30import Control.Monad.Trans.Control
29import Control.Monad.Trans.Control
31import Control.Monad.Trans.Except (ExceptT)
30import Control.Monad.Trans.Except (ExceptT)
32import Control.Monad.Trans.Identity (IdentityT)
31import Control.Monad.Trans.Identity (IdentityT)
@@ -35,8 +34,8 @@ import Control.Monad.Trans.Maybe (MaybeT)
35import Control.Monad.Trans.Resource
34import Control.Monad.Trans.Resource
36import qualified Control.Monad.Writer.Lazy as LW
35import qualified Control.Monad.Writer.Lazy as LW
37import qualified Control.Monad.Writer.Strict as W
36import qualified Control.Monad.Writer.Strict as W
38−import Network.Google.Auth
39import Network.Google.Env
37import Network.Google.Env
38+import Network.Google.Internal.HTTP
40import Network.Google.Prelude
39import Network.Google.Prelude
41
40
42newtype Google a = Google { unGoogle :: ReaderT Env (ResourceT IO) a }
41newtype Google a = Google { unGoogle :: ReaderT Env (ResourceT IO) a }
@@ -94,11 +93,19 @@ instance (Monoid w, MonadGoogle m) => MonadGoogle (RW.RWST r w s m) where
94instance (Monoid w, MonadGoogle m) => MonadGoogle (LRW.RWST r w s m) where
93instance (Monoid w, MonadGoogle m) => MonadGoogle (LRW.RWST r w s m) where
95 liftGoogle = lift . liftGoogle
94 liftGoogle = lift . liftGoogle
96
95
97−runGoogle :: MonadResource m => Env -> Google a -> m a
96+runGoogle :: (MonadResource m, HasEnv r) => r -> Google a -> m a
98−runGoogle e m = liftResourceT $ runReaderT (unGoogle m) e -- (e ^. environment)
97+runGoogle e m = liftResourceT $ runReaderT (unGoogle m) (e ^. environment)
99
98
100−send :: GoogleRequest a => a -> m (Rs a)
99+send :: (MonadGoogle m, GoogleRequest a) => a -> m (Rs a)
101−send = undefined
100+send x = liftGoogle $ do
101+ e <- ask
102+ r <- perform e x
103+ hoistError r
102
104
103−-- download :: GoogleRequest (MediaDownload a) => a -> m (Rs (MediaDownload a))
105+media :: (MonadGoogle m, GoogleRequest (MediaDownload a))
106+ => a
107+ -> m (Rs (MediaDownload a))
104−-- download = send . MediaDownload
108+media = send . MediaDownload
109+
110+hoistError :: MonadThrow m => Either Error a -> m a
111+hoistError = either (throwingM _Error) return
gogol/src/Network/Google/Auth.hs+1−2
@@ -15,8 +15,7 @@ module Network.Google.Auth where
15import Control.Concurrent (ThreadId)
15import Control.Concurrent (ThreadId)
16import Control.Monad.IO.Class
16import Control.Monad.IO.Class
17import Data.IORef
17import Data.IORef
18−import Data.Time
19−import Network.Google.Types
18+import Network.Google.Prelude
20
19
21data Credentials
20data Credentials
22 = FromKey AuthKey
21 = FromKey AuthKey
gogol/src/Network/Google/Env.hs+1−7
@@ -9,22 +9,16 @@
9-- Environment and Google specific configuration for the 'Network.Google' monad.
9-- Environment and Google specific configuration for the 'Network.Google' monad.
10module Network.Google.Env where
10module Network.Google.Env where
11
11
12−import Control.Applicative
13import Control.Lens
12import Control.Lens
14−import Control.Monad
15import Control.Monad.Catch
13import Control.Monad.Catch
16import Control.Monad.IO.Class
14import Control.Monad.IO.Class
17import Control.Monad.Reader
15import Control.Monad.Reader
18−import Data.Monoid
19import Network.Google.Auth
16import Network.Google.Auth
20−import Network.Google.Internal.Types
21import Network.Google.Types
17import Network.Google.Types
22import Network.HTTP.Conduit
18import Network.HTTP.Conduit
23
19
24-- | The environment containing the parameters required to make Google requests.
20-- | The environment containing the parameters required to make Google requests.
25data Env = Env
21data Env = Env
26− -- { _envRetryCheck :: !(Int -> HttpException -> Bool)
27− -- , _envRetryPolicy :: !RetryPolicy
28 { _envTimeout :: !(Maybe Seconds)
22 { _envTimeout :: !(Maybe Seconds)
29 , _envManager :: !Manager
23 , _envManager :: !Manager
30 , _envAuth :: !Auth
24 , _envAuth :: !Auth
@@ -73,7 +67,7 @@ timeout s = local (envTimeout ?~ s)
73--
67--
74-- /See:/ 'newEnvWith'.
68-- /See:/ 'newEnvWith'.
75newEnv :: (MonadIO m, MonadCatch m) => Credentials -> m Env
69newEnv :: (MonadIO m, MonadCatch m) => Credentials -> m Env
76−newEnv c = liftIO (newManager conduitManagerSettings) >>= newEnvWith c
70+newEnv c = liftIO (newManager tlsManagerSettings) >>= newEnvWith c
77
71
78-- | /See:/ 'newEnv'
72-- | /See:/ 'newEnv'
79newEnvWith :: (MonadIO m, MonadCatch m) => Credentials -> Manager -> m Env
73newEnvWith :: (MonadIO m, MonadCatch m) => Credentials -> Manager -> m Env
gogol/src/Network/Google/Internal/HTTP.hs+6−17
@@ -12,29 +12,18 @@
12module Network.Google.Internal.HTTP where
12module Network.Google.Internal.HTTP where
13
13
14import Control.Applicative
14import Control.Applicative
15−import Control.Lens
16−import Control.Monad
17import Control.Monad.Catch
15import Control.Monad.Catch
18−import Control.Monad.IO.Class
19−import Control.Monad.Morph
20−import Data.Bifunctor
21−-- import Control.Monad.State.Lazy
22import Control.Monad.Trans.Resource
16import Control.Monad.Trans.Resource
23−import Control.Retry
24−import Data.Conduit
25import Data.Default.Class
17import Data.Default.Class
26import Data.Monoid
18import Data.Monoid
27−import qualified Data.Text as Text
19+import qualified Data.Text.Encoding as Text
28−import qualified Data.Text.Encoding as Text
29−import qualified Data.Text.Lazy as LText
20+import qualified Data.Text.Lazy as LText
30−import qualified Data.Text.Lazy.Builder as Build
21+import qualified Data.Text.Lazy.Builder as Build
31−import GHC.Exts (toList)
22+import GHC.Exts (toList)
32−import Network.Google.Auth
23+import Network.Google.Env (Env (..))
33−import Network.Google.Env (Env (..))
34−import Network.Google.Internal.Types
35import Network.Google.Types
24import Network.Google.Types
36import Network.HTTP.Conduit
25import Network.HTTP.Conduit
37−import qualified Network.HTTP.Conduit as Client
26+import qualified Network.HTTP.Conduit as Client
38import Network.HTTP.Media
27import Network.HTTP.Media
39import Network.HTTP.Types
28import Network.HTTP.Types
40
29
gogol/src/Network/Google/Internal/Types.hsdeleted−16
@@ -1,16 +0,0 @@
1−{-# LANGUAGE DeriveDataTypeable #-}
2−{-# LANGUAGE DeriveGeneric #-}
3−{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4−
5−-- |
6−-- Module : Network.Google.Env
7−-- Copyright : (c) 2015 Brendan Hay
8−-- License : Mozilla Public License, v. 2.0.
9−-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
10−-- Stability : provisional
11−-- Portability : non-portable (GHC extensions)
12−--
13−module Network.Google.Internal.Types where
14−
15−import Data.Data
16−import GHC.Generics