packages feed

postgresql-syntax-0.5.0.0: library-internal/PostgresqlSyntax/Ast/InsertColumnItem.hs

module PostgresqlSyntax.Ast.InsertColumnItem where

import qualified HeadedMegaparsec as Parser
import PostgresqlSyntax.Ast.Ident
import PostgresqlSyntax.Ast.Indirection
import qualified PostgresqlSyntax.Helpers.Gens as Gens
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import qualified PostgresqlSyntax.Helpers.TextBuilders as TextBuilders
import PostgresqlSyntax.IsAst
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc

-- |
-- ==== References
-- @
-- insert_column_item:
--   | ColId opt_indirection
-- @
data InsertColumnItem = InsertColumnItem Ident (Maybe Indirection)
  deriving (Show, Generic, Eq, Ord, Data)

instance IsAst InsertColumnItem where
  toTextBuilder settings (InsertColumnItem a b) = toTextBuilder settings a <> TextBuilders.suffixMaybe (toTextBuilder settings) b
  parser settings = do
    a <- colId settings
    Parser.endHead
    b <- optional (Parsers.space1 *> parser settings)
    return (InsertColumnItem a b)

instance Qc.Arbitrary InsertColumnItem where
  shrink = Qc.genericShrink
  arbitrary = InsertColumnItem <$> arbitrary <*> Gens.terminatingMaybe arbitrary