Compare commits
	
		
			No commits in common. "647b5c2ad1cbac737b2372fdf371e0863a059640" and "fde68ee8339b57737c8db6aa4a53dc9558748dc2" have entirely different histories.
		
	
	
		
			647b5c2ad1
			...
			fde68ee833
		
	
		
							
								
								
									
										26
									
								
								app/Main.hs
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								app/Main.hs
									
									
									
									
									
								
							| @ -61,17 +61,17 @@ app :: Application | |||||||
| app = serve (Proxy :: Proxy API) server | app = serve (Proxy :: Proxy API) server | ||||||
| 
 | 
 | ||||||
| type API = | type API = | ||||||
|   "utf8" :> Capture "bytes" Text :> Get '[PlainText, HTML] Utf8Model |   "bytes" :> Capture "bytes" Text :> Get '[PlainText, HTML] BytesModel | ||||||
|   :<|> "codepoints" :> Capture "codepoints" Text :> Get '[PlainText, HTML] CodepointsModel |   :<|> "codepoints" :> Capture "codepoints" Text :> Get '[PlainText, HTML] CodepointsModel | ||||||
|   :<|> "text" :> Capture "text" Text :> Get '[HTML] TextModel |   :<|> "text" :> Capture "text" Text :> Get '[HTML] TextModel | ||||||
| 
 | 
 | ||||||
| server :: Server API | server :: Server API | ||||||
| server = | server = | ||||||
|   utf8R :<|> codepointsR :<|> textR |   bytesR :<|> codepointsR :<|> textR | ||||||
|   where |   where | ||||||
|     utf8R bytesP = do |     bytesR bytesP = do | ||||||
|       bytes <- Parsers.parseHexBytes bytesP `orThrow` const err400 |       bytes <- Parsers.parseHexBytes bytesP `orThrow` const err400 | ||||||
|       pure $ mkUtf8Model bytes |       pure $ BytesModel $ Decode.decodeUtf8 bytes | ||||||
| 
 | 
 | ||||||
|     codepointsR codepointsP = do |     codepointsR codepointsP = do | ||||||
|       codepoints' <- Parsers.parseCodepoints codepointsP `orThrow` const err400 |       codepoints' <- Parsers.parseCodepoints codepointsP `orThrow` const err400 | ||||||
| @ -82,14 +82,11 @@ server = | |||||||
| 
 | 
 | ||||||
| -- /bytes/<bytes> | -- /bytes/<bytes> | ||||||
| 
 | 
 | ||||||
| newtype Utf8Model = Utf8Model | newtype BytesModel = BytesModel | ||||||
|   { codepoints :: [([Word8], Either String Char)] |   { codepoints :: [([Word8], Either String Char)] | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| mkUtf8Model :: [Word8] -> Utf8Model | instance MimeRender PlainText BytesModel where | ||||||
| mkUtf8Model = Utf8Model . Decode.decodeUtf8 |  | ||||||
| 
 |  | ||||||
| instance MimeRender PlainText Utf8Model where |  | ||||||
|   mimeRender _ model = renderText $ |   mimeRender _ model = renderText $ | ||||||
|     Table.render "  " $ concat |     Table.render "  " $ concat | ||||||
|       [ [ [ Table.cl $ Text.pack $ unwords $ map showByteHex bytes |       [ [ [ Table.cl $ Text.pack $ unwords $ map showByteHex bytes | ||||||
| @ -110,7 +107,7 @@ instance MimeRender PlainText Utf8Model where | |||||||
|       | (bytes, eiC) <- model.codepoints |       | (bytes, eiC) <- model.codepoints | ||||||
|       ] |       ] | ||||||
| 
 | 
 | ||||||
| instance MimeRender HTML Utf8Model where | instance MimeRender HTML BytesModel where | ||||||
|   mimeRender _ model = renderHtml $ documentWithBody $ do |   mimeRender _ model = renderHtml $ documentWithBody $ do | ||||||
|     H.table $ for_ model.codepoints $ \(bytes, eiC) -> do |     H.table $ for_ model.codepoints $ \(bytes, eiC) -> do | ||||||
|       H.tr $ do |       H.tr $ do | ||||||
| @ -131,14 +128,7 @@ newtype CodepointsModel = CodepointsModel | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| mkCodepointsModel :: [(Word, Word)] -> CodepointsModel | mkCodepointsModel :: [(Word, Word)] -> CodepointsModel | ||||||
| mkCodepointsModel = | mkCodepointsModel = CodepointsModel . map go . concatMap (uncurry enumFromTo) | ||||||
|   CodepointsModel |  | ||||||
|   -- Limit number of returned codepoints. Otherwise it's |  | ||||||
|   -- too easy to provoke massive response bodies with requests like |  | ||||||
|   -- /codepoints/0-99999999 |  | ||||||
|   . take 100000 |  | ||||||
|   . map go |  | ||||||
|   . concatMap (uncurry enumFromTo) |  | ||||||
|   where |   where | ||||||
|     go codepoint = (codepoint, toChar codepoint) |     go codepoint = (codepoint, toChar codepoint) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user