Skip to content

Commit

Permalink
Do not expose TH primitives such as Name
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexeyRaga committed Jul 4, 2018
1 parent 5248d95 commit 4f3817c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: avro
version: '0.3.1.1'
version: '0.3.1.2'
synopsis: Avro serialization support for Haskell
description: Avro serialization and deserialization support for Haskell
category: Data
Expand Down
21 changes: 11 additions & 10 deletions src/Data/Avro/Deriving.hs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Lazy.Char8 as LBSC8
import qualified Data.HashMap.Strict as HM
import qualified Data.Set as S
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Vector as V
Expand All @@ -55,18 +56,18 @@ import qualified Data.Vector as V
-- Generates data types, FromAvro and ToAvro instances.
data DeriveOptions = DeriveOptions
{ -- | How to build field names for generated data types
doFieldNameBuilder :: TypeName -> Field -> Name
}
fieldNameBuilder :: TypeName -> Field -> T.Text
} deriving Generic

-- | Default deriving options
--
-- @
-- defaultDeriveOptions = 'DeriveOptions'
-- { doFieldNameBuilder = 'mkPrefixedFieldName'
-- { fieldNameBuilder = 'mkPrefixedFieldName'
-- }
-- @
defaultDeriveOptions = DeriveOptions
{ doFieldNameBuilder = mkPrefixedFieldName
{ fieldNameBuilder = mkPrefixedFieldName
}

-- | Generates a field name that is prefixed with the type name.
Expand All @@ -77,8 +78,8 @@ defaultDeriveOptions = DeriveOptions
-- @
-- Person { personFirstName :: Text }
-- @
mkPrefixedFieldName :: TypeName -> Field -> Name
mkPrefixedFieldName (TN dn) fld = mkTextName . sanitiseName $
mkPrefixedFieldName :: TypeName -> Field -> T.Text
mkPrefixedFieldName (TN dn) fld = sanitiseName $
updateFirst T.toLower dn <> updateFirst T.toUpper (fldName fld)

-- | Generates a field name that matches the field name in schema
Expand All @@ -92,8 +93,8 @@ mkPrefixedFieldName (TN dn) fld = mkTextName . sanitiseName $
-- @
-- You may want to enable 'DuplicateRecordFields' if you want to use this method.

mkAsIsFieldName :: TypeName -> Field -> Name
mkAsIsFieldName _ = mkTextName . sanitiseName . updateFirst T.toLower . fldName
mkAsIsFieldName :: TypeName -> Field -> Text
mkAsIsFieldName _ = sanitiseName . updateFirst T.toLower . fldName

-- | Generates Haskell classes and 'FromAvro' and 'ToAvro' instances
-- given the Avro schema file
Expand Down Expand Up @@ -221,7 +222,7 @@ genToAvro opts s@(Record n _ _ _ _ fs) =
toAvro = $(genToAvroFieldsExp sname)
|]
genToAvroFieldsExp sname = [| \r -> record $(varE sname)
$(let assign fld = [| T.pack $(mkTextLit (fldName fld)) .= $(varE $ (doFieldNameBuilder opts) n fld) r |]
$(let assign fld = [| T.pack $(mkTextLit (fldName fld)) .= $(varE $ mkTextName $ (fieldNameBuilder opts) n fld) r |]
in listE $ assign <$> fs
)
|]
Expand Down Expand Up @@ -404,7 +405,7 @@ mkDataTypeName' =
mkField :: DeriveOptions -> TypeName -> Field -> Q VarStrictType
mkField opts prefix field = do
ftype <- mkFieldTypeName (fldType field)
let fName = (doFieldNameBuilder opts) prefix field
let fName = mkTextName $ (fieldNameBuilder opts) prefix field
pure (fName, defaultStrictness, ftype)

genNewtype :: Name -> Q Dec
Expand Down

0 comments on commit 4f3817c

Please sign in to comment.