add Serialize for BuildResult

This commit is contained in:
Richard Marko 2023-11-15 15:59:36 +01:00
parent 7f4aeae935
commit c53c10721b
2 changed files with 40 additions and 12 deletions

View File

@ -5,8 +5,11 @@ Maintainer : srk <srk@48.io>
|-}
module System.Nix.Store.Remote.Serialize where
import Data.Text
import Data.Serialize (Serialize(..))
import Data.Text (Text)
import qualified Data.Bool
import qualified Data.Text
import System.Nix.Build (BuildMode(..), BuildStatus(..), BuildResult(..))
import System.Nix.Store.Remote.Serialize.Prim
@ -24,13 +27,23 @@ instance Serialize BuildStatus where
put = putEnum
instance Serialize BuildResult where
get =
BuildResult
get = do
status <- get
errorMessage <-
(\em -> Data.Bool.bool (Just em) Nothing (Data.Text.null em))
<$> get
-- TODO(srk): fishy
<*> (Just <$> get)
<*> getInt
<*> getBool
<*> getTime
<*> getTime
put = undefined
timesBuilt <- getInt
isNonDeterministic <- getBool
startTime <- getTime
stopTime <- getTime
pure $ BuildResult{..}
put BuildResult{..} = do
put status
case errorMessage of
Just err -> putText err
Nothing -> putText mempty
putInt timesBuilt
putBool isNonDeterministic
putTime startTime
putTime stopTime

View File

@ -102,11 +102,26 @@ prop_Text = roundTripS
prop_buildMode :: BuildMode -> Property
prop_buildMode = roundTripS
-- ** BuildStatus
prop_buildStatus :: BuildStatus -> Property
prop_buildStatus = roundTripS
spec_buildMode :: Spec
spec_buildMode =
-- ** BuildResult
prop_buildResult :: Property
prop_buildResult =
forAll (arbitrary `suchThat` ((/= Just "") . System.Nix.Build.errorMessage))
$ \br ->
roundTripS
$ br { System.Nix.Build.startTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
, System.Nix.Build.stopTime = Data.Time.Clock.POSIX.posixSecondsToUTCTime 0
}
-- ** Enums
spec_buildEnums :: Spec
spec_buildEnums =
let it' name constr value = it name $ runPut (put constr) `shouldBe` runPut (putInt value)
in do
describe "Build enum order matches Nix" $ do