Implement saving+loading the game
Implement ToJSON and FromJSON for all of the various pieces of the game state, and add a pair of functions saveGame/loadGame implementing a prism to save the game as zlib-compressed JSON. To test this, there's now Arbitrary, CoArbitrary, and Function instances for all the parts of the game state - to get around circular imports with the concrete entities this unfortunately is happening via orphan instances, plus an hs-boot file to break a circular import that was just a little too hard to remove by moving things around. Ugh.
This commit is contained in:
		
							parent
							
								
									2f2e5a0b68
								
							
						
					
					
						commit
						f37d0f75c0
					
				
					 30 changed files with 620 additions and 97 deletions
				
			
		|  | @ -44,4 +44,10 @@ test | |||
|           (oextend f . oextend g) mh === oextend (f . oextend g) mh | ||||
|       ] | ||||
|     ] | ||||
|   , testGroup "Saving the game" | ||||
|     [ testProperty "forms a prism" $ isPrism saved | ||||
|     , testProperty "preserves the character ID" $ \gs -> | ||||
|         let Just gs' = loadGame $ saveGame gs | ||||
|         in gs' ^. character === gs ^. character | ||||
|     ] | ||||
|   ] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue