remote: also include what was parsed (via Show) in incremental parser errors

This commit is contained in:
sorki 2023-12-03 15:05:00 +01:00
parent 6ebc2fcc5b
commit f1f30af6d5
4 changed files with 15 additions and 7 deletions

View File

@ -98,6 +98,7 @@ doReq
. ( MonadIO m
, MonadRemoteStore m
, StoreReply a
, Show a
)
=> StoreRequest a
-> m a

View File

@ -41,7 +41,10 @@ processOutput = do
sockGet8 >>= go . (decoder protoVersion)
Control.Monad.unless (leftover == mempty) $
throwError $ RemoteStoreError_LoggerLeftovers leftover
throwError
$ RemoteStoreError_LoggerLeftovers
(show ectrl)
leftover
case ectrl of
Left e -> throwError $ RemoteStoreError_SerializerLogger e

View File

@ -46,14 +46,14 @@ data RemoteStoreError
| RemoteStoreError_ClientVersionTooOld
| RemoteStoreError_Disconnected
| RemoteStoreError_GetAddrInfoFailed
| RemoteStoreError_GenericIncrementalLeftovers ByteString -- when there are bytes left over after genericIncremental parser is done
| RemoteStoreError_GenericIncrementalLeftovers String ByteString -- when there are bytes left over after genericIncremental parser is done, (Done x leftover), first param is show x
| RemoteStoreError_GenericIncrementalFail String ByteString -- when genericIncremental parser returns ((Fail msg leftover) :: Result)
| RemoteStoreError_SerializerGet SError
| RemoteStoreError_SerializerHandshake HandshakeSError
| RemoteStoreError_SerializerLogger LoggerSError
| RemoteStoreError_SerializerPut SError
| RemoteStoreError_IOException SomeException
| RemoteStoreError_LoggerLeftovers ByteString -- when there are bytes left over after incremental logger parser is done
| RemoteStoreError_LoggerLeftovers String ByteString -- when there are bytes left over after incremental logger parser is done, (Done x leftover), first param is show x
| RemoteStoreError_LoggerParserFail String ByteString -- when incremental parser returns ((Fail msg leftover) :: Result)
| RemoteStoreError_NoDataProvided
| RemoteStoreError_NoNarSourceProvided

View File

@ -22,6 +22,7 @@ import qualified Data.Serialize.Get
genericIncremental
:: ( MonadIO m
, MonadError RemoteStoreError m
, Show a
)
=> m ByteString
-> Get a
@ -30,9 +31,10 @@ genericIncremental getsome parser = do
getsome >>= go . decoder
where
decoder = Data.Serialize.Get.runGetPartial parser
go (Done _ leftover) | leftover /= mempty =
go (Done x leftover) | leftover /= mempty =
throwError
$ RemoteStoreError_GenericIncrementalLeftovers
(show x)
leftover
go (Done x _leftover) = pure x
@ -99,6 +101,8 @@ sockGetS
, MonadError e m
, MonadReader r m
, MonadIO m
, Show a
, Show e
)
=> NixSerializer r e a
-> m a
@ -114,19 +118,19 @@ sockGetS s = do
-- * Obsolete
getSocketIncremental
:: MonadRemoteStore m
:: (MonadRemoteStore m, Show a)
=> Get a
-> m a
getSocketIncremental = genericIncremental sockGet8
sockGet
:: MonadRemoteStore m
:: (MonadRemoteStore m, Show a)
=> Get a
-> m a
sockGet = getSocketIncremental
sockGetInt
:: (Integral a, MonadRemoteStore m)
:: (Integral a, MonadRemoteStore m, Show a)
=> m a
sockGetInt = getSocketIncremental getInt