packages feed

plexus-synapse-0.3.0.0: test/TypeRefJson.hs

{-# LANGUAGE OverloadedStrings #-}

-- | Quick test to see TypeRef JSON serialization
module Main where

import Data.Aeson (encode)
import Data.Aeson.Encode.Pretty (encodePretty)
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.Text (Text)

import Synapse.IR.Types

main :: IO ()
main = do
  putStrLn "=== TypeRef JSON Serialization Test ==="
  putStrLn ""

  -- Test 1: Simple QualifiedName with namespace
  putStrLn "1. RefNamed with namespace:"
  let qn1 = QualifiedName { qnNamespace = "cone", qnLocalName = "UUID" }
  let ref1 = RefNamed qn1
  putStrLn "   Haskell: "
  print ref1
  putStrLn "   JSON (compact):"
  BSL.putStrLn (encode ref1)
  putStrLn "   JSON (pretty):"
  BSL.putStrLn (encodePretty ref1)
  putStrLn ""

  -- Test 2: Empty namespace
  putStrLn "2. RefNamed with empty namespace:"
  let qn2 = QualifiedName { qnNamespace = "", qnLocalName = "GlobalType" }
  let ref2 = RefNamed qn2
  putStrLn "   Haskell: "
  print ref2
  putStrLn "   JSON (pretty):"
  BSL.putStrLn (encodePretty ref2)
  putStrLn ""

  -- Test 3: Nested structure
  putStrLn "3. RefOptional (RefArray (RefNamed)):"
  let qn3 = QualifiedName { qnNamespace = "arbor", qnLocalName = "Node" }
  let ref3 = RefOptional (RefArray (RefNamed qn3))
  putStrLn "   Haskell: "
  print ref3
  putStrLn "   JSON (pretty):"
  BSL.putStrLn (encodePretty ref3)
  putStrLn ""

  -- Test 4: qualifiedNameFull function
  putStrLn "4. qualifiedNameFull examples:"
  putStrLn $ "   cone.UUID -> " <> show (qualifiedNameFull qn1)
  putStrLn $ "   GlobalType -> " <> show (qualifiedNameFull qn2)
  putStrLn ""

  -- Test 5: FieldDef with QualifiedName
  putStrLn "5. FieldDef with RefNamed:"
  let fd = FieldDef
        { fdName = "tree_id"
        , fdType = RefNamed (QualifiedName "arbor" "UUID")
        , fdDescription = Just "Tree identifier"
        , fdRequired = True
        , fdDefault = Nothing
        }
  putStrLn "   JSON (pretty):"
  BSL.putStrLn (encodePretty fd)