packages feed

avro 0.3.1.2 → 0.3.2.0

raw patch · 2 files changed

+17/−8 lines, 2 files

Files

avro.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 6ce25074d44e607f3bbf1f81921a61fe9d8ea37a5cbde2000d26607b4d04d85a+-- hash: a7df532e971306f0e8b7c7ff21ecb95e20f336d396ec72f86154b1df850f7ee7  name:           avro-version:        0.3.1.2+version:        0.3.2.0 synopsis:       Avro serialization support for Haskell description:    Avro serialization and deserialization support for Haskell category:       Data
src/Data/Avro/Deriving.hs view
@@ -39,6 +39,7 @@ import           Data.Semigroup                ((<>)) import           GHC.Generics                  (Generic) import           Language.Haskell.TH           as TH+import           Language.Haskell.TH.Lib       as TH import           Language.Haskell.TH.Syntax  import           Data.Avro.Deriving.NormSchema@@ -200,6 +201,9 @@             schema = pure $(varE sname)       |] +newNames :: String {- ^ base name -} -> Int {- ^ count -} -> Q [Name]+newNames base n = sequence [ newName (base++show i) | i <- [1..n] ]+ genToAvro :: DeriveOptions -> Schema -> Q [Dec] genToAvro opts s@(Enum n _ _ _ vs _) =   toAvroInstance (mkSchemaValueName n)@@ -221,11 +225,15 @@       [d| instance ToAvro $(conT $ mkDataTypeName n) where             toAvro = $(genToAvroFieldsExp sname)       |]-    genToAvroFieldsExp sname = [| \r -> record $(varE sname)-        $(let assign fld = [| T.pack $(mkTextLit (fldName fld)) .= $(varE $ mkTextName $ (fieldNameBuilder opts) n fld) r |]-          in listE $ assign <$> fs-        )-      |]+    genToAvroFieldsExp sname = do+      names <- newNames "p_" (length fs)+      let con = conP (mkDataTypeName n) (varP <$> names)+      lamE [con]+            [| record $(varE sname)+                $(let assign (fld, n) = [| T.pack $(mkTextLit (fldName fld)) .= $(varE n) |]+                  in listE $ assign <$> zip fs names+                )+            |]  genToAvro opts s@(Fixed n _ _ size) =   toAvroInstance (mkSchemaValueName n)@@ -244,7 +252,8 @@       x = $(schemaDef' sch)   |] -schemaDef' sch = mkSchema sch+schemaDef' :: S.Type -> ExpQ+schemaDef' = mkSchema   where mkSchema = \case           Null           -> [e| Null |]           Boolean        -> [e| Boolean |]