devblog
This commit is contained in:
		
					parent
					
						
							
								1dc930063a
							
						
					
				
			
			
				commit
				
					
						abbd43bccb
					
				
			
		
					 1 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
Only did a few hours today, getting started on implementing the
 | 
			
		||||
[[design/external_special_remote_protocol]].
 | 
			
		||||
 | 
			
		||||
Mostly this involved writing down types for the various messages,
 | 
			
		||||
and code to parse them. I'm very happy with how the parsing turned out;
 | 
			
		||||
nearly all the work is handled by the data types and type classes,
 | 
			
		||||
and so only one line of very simple code is needed to parse each message:
 | 
			
		||||
 | 
			
		||||
[[!format haskell """
 | 
			
		||||
instance Receivable Response where
 | 
			
		||||
       parseCommand "PREPARE-SUCCESS" = parse0 PREPARE_SUCCESS
 | 
			
		||||
       parseCommand "TRANSFER-SUCCESS" = parse2 TRANSFER_SUCCESS
 | 
			
		||||
       parseCommand "TRANSFER-FAILURE" = parse3 TRANSFER_FAILURE
 | 
			
		||||
"""]]]
 | 
			
		||||
 | 
			
		||||
An especially nice part of this implementation is that it knows exactly how
 | 
			
		||||
many parameters each message should have (and their types of course), and so
 | 
			
		||||
can both reject invalid messages, and avoid ambiguity in tokenizing the
 | 
			
		||||
parameters. For example, the 3rd parameter of TRANSFER-FAILURE is an error
 | 
			
		||||
message, and as it's the last parameter, it can contain multiple words.
 | 
			
		||||
 | 
			
		||||
	*Remote.External> parseMessage "TRANSFER-FAILURE STORE SHA1--foo doesn't work on Christmas" :: Maybe Response
 | 
			
		||||
	Just (TRANSFER_FAILURE Upload (Key {keyName = "foo", keyBackendName = "SHA1", keySize = Nothing, keyMtime = Nothing}) "doesn't work on Christmas")
 | 
			
		||||
 | 
			
		||||
That's the easy groundwork for external special remotes, done.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue