packages feed

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

module PostgresqlSyntax.Ast.WhenClause where

import qualified HeadedMegaparsec as Parser
import {-# SOURCE #-} PostgresqlSyntax.Ast.AExpr (AExpr)
import qualified PostgresqlSyntax.Helpers.Gens as Gens
import qualified PostgresqlSyntax.Helpers.Parsers as Parsers
import PostgresqlSyntax.IsAst
import PostgresqlSyntax.Prelude
import qualified Test.QuickCheck as Qc

-- |
-- ==== References
-- @
-- when_clause:
--   |  WHEN a_expr THEN a_expr
-- @
data WhenClause = WhenClause AExpr AExpr
  deriving (Show, Generic, Eq, Ord, Data)

instance IsAst WhenClause where
  toTextBuilder settings (WhenClause a b) = "WHEN " <> toTextBuilder settings a <> " THEN " <> toTextBuilder settings b
  parser settings = do
    Parsers.keyword "when"
    Parsers.space1
    Parser.endHead
    a <- parser settings
    Parsers.space1
    Parsers.keyword "then"
    Parsers.space1
    b <- parser settings
    return (WhenClause a b)

instance Qc.Arbitrary WhenClause where
  shrink = Qc.genericShrink
  arbitrary = WhenClause <$> Gens.downscale arbitrary <*> Gens.downscale arbitrary