@@ -7,20 +7,8 @@ module System.Nix.Store.Remote.MonadStore
7
7
, RemoteStoreT
8
8
, runRemoteStoreT
9
9
, mapStoreConfig
10
- -- * Reader helpers
11
- , getStoreDir
12
- , getStoreSocket
10
+ , MonadRemoteStore (.. )
13
11
, getProtoVersion
14
- -- * Logs
15
- , appendLogs
16
- , getLogs
17
- , flushLogs
18
- , gotError
19
- , getErrors
20
- -- * Data required from client
21
- , getData
22
- , setData
23
- , clearData
24
12
) where
25
13
26
14
import Control.Monad.Except (MonadError )
@@ -119,21 +107,131 @@ mapStoreConfig f =
119
107
) f
120
108
. _unRemoteStoreT
121
109
122
- -- | Ask for a @StoreDir@
123
- getStoreDir
124
- :: ( Monad m
125
- , HasStoreDir r
126
- )
127
- => RemoteStoreT r m StoreDir
128
- getStoreDir = hasStoreDir <$> RemoteStoreT ask
129
-
130
- -- | Ask for a @StoreDir@
131
- getStoreSocket
132
- :: ( Monad m
133
- , HasStoreSocket r
134
- )
135
- => RemoteStoreT r m Socket
136
- getStoreSocket = hasStoreSocket <$> RemoteStoreT ask
110
+ class ( Monad m
111
+ , MonadError RemoteStoreError m
112
+ )
113
+ => MonadRemoteStore m where
114
+
115
+ appendLogs :: [Logger ] -> m ()
116
+ default appendLogs
117
+ :: ( MonadTrans t
118
+ , MonadRemoteStore m'
119
+ , m ~ t m'
120
+ )
121
+ => [Logger ]
122
+ -> m ()
123
+ appendLogs = lift . appendLogs
124
+
125
+ gotError :: m Bool
126
+ default gotError
127
+ :: ( MonadTrans t
128
+ , MonadRemoteStore m'
129
+ , m ~ t m'
130
+ )
131
+ => m Bool
132
+ gotError = lift gotError
133
+
134
+ getErrors :: m [Logger ]
135
+ default getErrors
136
+ :: ( MonadTrans t
137
+ , MonadRemoteStore m'
138
+ , m ~ t m'
139
+ )
140
+ => m [Logger ]
141
+ getErrors = lift getErrors
142
+
143
+ getLogs :: m [Logger ]
144
+ default getLogs
145
+ :: ( MonadTrans t
146
+ , MonadRemoteStore m'
147
+ , m ~ t m'
148
+ )
149
+ => m [Logger ]
150
+ getLogs = lift getLogs
151
+
152
+ flushLogs :: m ()
153
+ default flushLogs
154
+ :: ( MonadTrans t
155
+ , MonadRemoteStore m'
156
+ , m ~ t m'
157
+ )
158
+ => m ()
159
+ flushLogs = lift flushLogs
160
+
161
+ setData :: ByteString -> m ()
162
+ default setData
163
+ :: ( MonadTrans t
164
+ , MonadRemoteStore m'
165
+ , m ~ t m'
166
+ )
167
+ => ByteString
168
+ -> m ()
169
+ setData = lift . setData
170
+
171
+ getData :: m (Maybe ByteString )
172
+ default getData
173
+ :: ( MonadTrans t
174
+ , MonadRemoteStore m'
175
+ , m ~ t m'
176
+ )
177
+ => m (Maybe ByteString )
178
+ getData = lift getData
179
+
180
+ clearData :: m ()
181
+ default clearData
182
+ :: ( MonadTrans t
183
+ , MonadRemoteStore m'
184
+ , m ~ t m'
185
+ )
186
+ => m ()
187
+ clearData = lift clearData
188
+
189
+ getStoreDir :: m StoreDir
190
+ default getStoreDir
191
+ :: ( MonadTrans t
192
+ , MonadRemoteStore m'
193
+ , m ~ t m'
194
+ )
195
+ => m StoreDir
196
+ getStoreDir = lift getStoreDir
197
+
198
+ getStoreSocket :: m Socket
199
+ default getStoreSocket
200
+ :: ( MonadTrans t
201
+ , MonadRemoteStore m'
202
+ , m ~ t m'
203
+ )
204
+ => m Socket
205
+ getStoreSocket = lift getStoreSocket
206
+
207
+ instance MonadRemoteStore m => MonadRemoteStore (StateT s m )
208
+ instance MonadRemoteStore m => MonadRemoteStore (ReaderT r m )
209
+ instance MonadRemoteStore m => MonadRemoteStore (ExceptT RemoteStoreError m )
210
+
211
+ instance ( Monad m
212
+ , HasStoreDir r
213
+ , HasStoreSocket r
214
+ )
215
+ => MonadRemoteStore (RemoteStoreT r m ) where
216
+
217
+ getStoreDir = hasStoreDir <$> RemoteStoreT ask
218
+ getStoreSocket = hasStoreSocket <$> RemoteStoreT ask
219
+
220
+ appendLogs x =
221
+ RemoteStoreT
222
+ $ modify
223
+ $ \ s -> s { remoteStoreState_logs = remoteStoreState_logs s <> x }
224
+ getLogs = remoteStoreState_logs <$> RemoteStoreT get
225
+ flushLogs =
226
+ RemoteStoreT
227
+ $ modify
228
+ $ \ s -> s { remoteStoreState_logs = mempty }
229
+ gotError = any isError <$> getLogs
230
+ getErrors = filter isError <$> getLogs
231
+
232
+ getData = remoteStoreState_mData <$> RemoteStoreT get
233
+ setData x = RemoteStoreT $ modify $ \ s -> s { remoteStoreState_mData = pure x }
234
+ clearData = RemoteStoreT $ modify $ \ s -> s { remoteStoreState_mData = Nothing }
137
235
138
236
-- | Ask for a @StoreDir@
139
237
getProtoVersion
@@ -142,33 +240,3 @@ getProtoVersion
142
240
)
143
241
=> RemoteStoreT r m ProtoVersion
144
242
getProtoVersion = hasProtoVersion <$> RemoteStoreT ask
145
-
146
- -- * Logs
147
-
148
- gotError :: Monad m => RemoteStoreT r m Bool
149
- gotError = any isError <$> getLogs
150
-
151
- getErrors :: Monad m => RemoteStoreT r m [Logger ]
152
- getErrors = filter isError <$> getLogs
153
-
154
- appendLogs :: Monad m => [Logger ] -> RemoteStoreT r m ()
155
- appendLogs x = RemoteStoreT
156
- $ modify
157
- $ \ s -> s { remoteStoreState_logs = remoteStoreState_logs s <> x }
158
-
159
- getLogs :: Monad m => RemoteStoreT r m [Logger ]
160
- getLogs = remoteStoreState_logs <$> RemoteStoreT get
161
-
162
- flushLogs :: Monad m => RemoteStoreT r m ()
163
- flushLogs = RemoteStoreT $ modify $ \ s -> s { remoteStoreState_logs = mempty }
164
-
165
- -- * Data required from client
166
-
167
- getData :: Monad m => RemoteStoreT r m (Maybe ByteString )
168
- getData = remoteStoreState_mData <$> RemoteStoreT get
169
-
170
- setData :: Monad m => ByteString -> RemoteStoreT r m ()
171
- setData x = RemoteStoreT $ modify $ \ s -> s { remoteStoreState_mData = pure x }
172
-
173
- clearData :: Monad m => RemoteStoreT r m ()
174
- clearData = RemoteStoreT $ modify $ \ s -> s { remoteStoreState_mData = Nothing }
0 commit comments