Skip to content

Commit b8354d8

Browse files
committed
squash! hnix-store-remote prototype
use ExceptT, concat logs, utility log functions
1 parent a01bff9 commit b8354d8

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

hnix-store-remote/src/System/Nix/Store/Remote/Protocol.hs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ module System.Nix.Store.Remote.Protocol (
77
, runStore) where
88

99
import Control.Exception (bracket)
10+
import Control.Monad.Except
1011
import Control.Monad.Reader
1112
import Control.Monad.State
1213

1314
import Data.Binary.Get
1415
import Data.Binary.Put
16+
import qualified Data.ByteString.Char8 as BSC
1517
import qualified Data.ByteString.Lazy as LBS
1618

1719
import Network.Socket hiding (send, sendTo, recv, recvFrom)
@@ -114,7 +116,9 @@ simpleOpArgs op args = do
114116
runOpArgs op args
115117
err <- gotError
116118
case err of
117-
True -> return False -- XXX: ErrorT?
119+
True -> do
120+
Error _num msg <- head <$> getError
121+
throwError $ BSC.unpack $ LBS.toStrict msg
118122
False -> do
119123
sockGetBool
120124

@@ -128,9 +132,13 @@ runOpArgs op args = do
128132
args
129133

130134
out <- processOutput
131-
put out
135+
modify (++out)
136+
err <- gotError
137+
when err $ do
138+
Error _num msg <- head <$> getError
139+
throwError $ BSC.unpack $ LBS.toStrict msg
132140

133-
runStore :: MonadStore a -> IO (a, [Logger])
141+
runStore :: MonadStore a -> IO (Either String a, [Logger])
134142
runStore code = do
135143
bracket (open sockPath) close run
136144
where
@@ -152,4 +160,4 @@ runStore code = do
152160
processOutput
153161

154162
run sock =
155-
flip runReaderT sock $ flip runStateT [] (greet >> code)
163+
flip runReaderT sock $ flip runStateT [] $ runExceptT (greet >> code)

hnix-store-remote/src/System/Nix/Store/Remote/Types.hs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@ module System.Nix.Store.Remote.Types (
22
MonadStore
33
, Logger(..)
44
, Field(..)
5-
, gotError) where
5+
, getLog
6+
, flushLog
7+
, gotError
8+
, getError) where
69

710

811
import qualified Data.ByteString.Lazy as LBS
912
import Network.Socket (Socket)
13+
import Control.Monad.Except
1014
import Control.Monad.Reader
1115
import Control.Monad.State
1216

13-
type MonadStore a = StateT [Logger] (ReaderT Socket IO) a
17+
type MonadStore a = ExceptT String (StateT [Logger] (ReaderT Socket IO)) a
1418

1519
type ActivityID = Int
1620
type ActivityParentID = Int
@@ -38,3 +42,12 @@ isError _ = False
3842

3943
gotError :: MonadStore Bool
4044
gotError = any isError <$> get
45+
46+
getError :: MonadStore [Logger]
47+
getError = filter isError <$> get
48+
49+
getLog :: MonadStore [Logger]
50+
getLog = get
51+
52+
flushLog :: MonadStore ()
53+
flushLog = put []

0 commit comments

Comments
 (0)