packages feed

wireform-proto-0.1.0.0: src/Proto/CodeGen/Types.hs

-- | Backward compatibility shim re-exporting name conversion utilities.
module Proto.CodeGen.Types (
  hsTypeName,
  hsFieldName,
  hsEnumCon,
  hsModuleName,
  hsScopedTypeName,
  hsScopedFieldName,
  hsScopedEnumCon,
  genTypeDecls,
  genEnumDecl,
  genOneofDecl,
) where

import Data.Text (Text)
import Prettyprinter (Doc)
import Proto.CodeGen (
  hsModuleName,
  hsTypeName,
  scopedFieldName,
  scopedTypeName,
  snakeToCamel,
  snakeToPascal,
 )
import Proto.IDL.AST (EnumDef, MessageDef, OneofDef)


hsFieldName :: Text -> Text
hsFieldName = snakeToCamel


hsEnumCon :: Text -> Text -> Text
hsEnumCon _enumName = snakeToPascal


hsScopedTypeName :: [Text] -> Text -> Text
hsScopedTypeName parents name = scopedTypeName (parents <> [name])


hsScopedFieldName :: [Text] -> Text -> Text
hsScopedFieldName = scopedFieldName


hsScopedEnumCon :: [Text] -> Text -> Text -> Text
hsScopedEnumCon scope _enumName valName =
  case scope of
    [] -> snakeToPascal valName
    _ -> scopedTypeName scope <> "'" <> snakeToPascal valName


genTypeDecls :: MessageDef -> [Doc ann]
genTypeDecls _ = []


genEnumDecl :: EnumDef -> Doc ann
genEnumDecl _ = mempty


genOneofDecl :: Text -> OneofDef -> Doc ann
genOneofDecl _ _ = mempty