1{-# LANGUAGE TemplateHaskell #-}
4-- Module : Streamly.Internal.Data.Serialize.TH.Common
5-- Copyright : (c) 2023 Composewell Technologies
6-- License : BSD3-3-Clause
7-- Maintainer : streamly@composewell.com
8-- Stability : experimental
11module Streamly.Internal.Data.Serialize.TH.Common
12 ( mkDeserializeExprOne
13 , mkSerializeExprFields
16--------------------------------------------------------------------------------
18--------------------------------------------------------------------------------
20import Language.Haskell.TH
21import Streamly.Internal.Data.Serialize.TH.Bottom
23--------------------------------------------------------------------------------
25--------------------------------------------------------------------------------
27mkDeserializeExprOne :: Name -> SimpleDataCon -> Q Exp
28mkDeserializeExprOne peeker (SimpleDataCon cname fields) =
30 -- Only tag is serialized for unit fields, no actual value
31 [] -> [|pure ($(varE (mkName "i0")), $(conE cname))|]
35 [ fmap makeBind [0 .. (numFields - 1)]
40 [ varE (makeI numFields)
44 [0 .. (numFields - 1)]))
49 numFields = length fields
52 (tupP [varP (makeI (i + 1)), varP (makeA i)])
53 [|$(varE peeker) $(varE (makeI i)) $(varE _arr) $(varE _endOffset)|]
55mkSerializeExprFields :: Name -> [Field] -> Q Exp
56mkSerializeExprFields poker fields =
58 -- Unit constructor, do nothing just tag is enough
59 [] -> [|pure ($(varE (mkName "i0")))|]
62 (fmap makeBind [0 .. (numFields - 1)] ++
63 [noBindS ([|pure $(varE (makeI numFields))|])])
65 numFields = length fields
68 (varP (makeI (i + 1)))
70 $(varE (makeI i)) $(varE _arr) $(varE (mkFieldName i))|]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list