mirror of
https://github.com/haskell-nix/hnix-store.git
synced 2024-09-11 18:05:56 +03:00
remote: thread ProtoVersion into logger
This commit is contained in:
parent
241fa58737
commit
76a8632d9c
@ -9,22 +9,26 @@ import System.Nix.Store.Remote.Serialize.Prim (putByteString)
|
||||
import System.Nix.Store.Remote.Serializer (logger, runSerialT)
|
||||
import System.Nix.Store.Remote.Socket (sockGet8, sockPut)
|
||||
import System.Nix.Store.Remote.MonadStore (MonadStore, clearData)
|
||||
import System.Nix.Store.Remote.Types (Logger(..))
|
||||
import System.Nix.Store.Remote.Types (Logger(..), ProtoVersion, hasProtoVersion)
|
||||
|
||||
import qualified Control.Monad.Reader
|
||||
import qualified Control.Monad.State.Strict
|
||||
import qualified Data.Serialize.Get
|
||||
import qualified Data.Serializer
|
||||
|
||||
processOutput :: MonadStore [Logger]
|
||||
processOutput = do
|
||||
sockGet8 >>= go . decoder
|
||||
protoVersion <- Control.Monad.Reader.asks hasProtoVersion
|
||||
sockGet8 >>= go . (decoder protoVersion)
|
||||
where
|
||||
decoder :: ByteString -> Result (Either () Logger)
|
||||
decoder =
|
||||
decoder :: ProtoVersion -> ByteString -> Result (Either () Logger)
|
||||
decoder protoVersion =
|
||||
Data.Serialize.Get.runGetPartial
|
||||
(runSerialT () $ Data.Serializer.getS logger)
|
||||
(runSerialT protoVersion $ Data.Serializer.getS logger)
|
||||
|
||||
go :: Result (Either () Logger) -> MonadStore [Logger]
|
||||
go (Done ectrl _leftover) = do
|
||||
protoVersion <- Control.Monad.Reader.asks hasProtoVersion
|
||||
case ectrl of
|
||||
-- TODO: tie this with throwError and better error type
|
||||
Left e -> error $ show e
|
||||
@ -41,11 +45,11 @@ processOutput = do
|
||||
sockPut $ putByteString part
|
||||
clearData
|
||||
|
||||
sockGet8 >>= go . decoder
|
||||
sockGet8 >>= go . (decoder protoVersion)
|
||||
|
||||
-- we should probably handle Read here as well
|
||||
x -> do
|
||||
next <- sockGet8 >>= go . decoder
|
||||
next <- sockGet8 >>= go . (decoder protoVersion)
|
||||
pure $ x : next
|
||||
go (Partial k) = do
|
||||
chunk <- sockGet8
|
||||
|
@ -248,7 +248,9 @@ errorInfo = liftSerialize
|
||||
loggerOpCode :: NixSerializer r e LoggerOpCode
|
||||
loggerOpCode = liftSerialize
|
||||
|
||||
logger :: NixSerializer r e Logger
|
||||
logger
|
||||
:: HasProtoVersion r
|
||||
=> NixSerializer r e Logger
|
||||
logger = Serializer
|
||||
{ getS = getS loggerOpCode >>= \case
|
||||
LoggerOpCode_Next ->
|
||||
|
@ -14,3 +14,6 @@ data ProtoVersion = ProtoVersion
|
||||
|
||||
class HasProtoVersion r where
|
||||
hasProtoVersion :: r -> ProtoVersion
|
||||
|
||||
instance HasProtoVersion ProtoVersion where
|
||||
hasProtoVersion = id
|
||||
|
@ -17,7 +17,7 @@ import System.Nix.Arbitrary ()
|
||||
import System.Nix.Derivation (Derivation(inputDrvs))
|
||||
import System.Nix.Store.Remote.Arbitrary ()
|
||||
import System.Nix.Store.Remote.Serializer
|
||||
import System.Nix.Store.Remote.Types (ErrorInfo(..), Trace(..))
|
||||
import System.Nix.Store.Remote.Types (ErrorInfo(..), ProtoVersion, Trace(..))
|
||||
|
||||
-- | Test for roundtrip using @NixSerializer@
|
||||
roundtripSReader
|
||||
@ -109,4 +109,4 @@ spec = parallel $ do
|
||||
$ roundtripS errorInfo
|
||||
prop "LoggerOpCode" $ roundtripS loggerOpCode
|
||||
prop "Verbosity" $ roundtripS verbosity
|
||||
prop "Logger" $ roundtripS logger
|
||||
prop "Logger" $ roundtripSReader @ProtoVersion logger
|
||||
|
Loading…
Reference in New Issue
Block a user