{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.Validity.Aeson where

import Data.Aeson
import Data.Validity
import Data.Validity.HashMap ()
import Data.Validity.Scientific ()
import Data.Validity.Text ()
import Data.Validity.Vector ()

-- | A 'Value' is valid if the recursive components are valid.
instance Validity Value where
    isValid (Object o) = isValid o
    isValid (Array a) = isValid a
    isValid (String t) = isValid t
    isValid (Number s) = isValid s
    isValid (Bool b) = isValid b
    isValid Null = True
    validate (Object o) = o <?!> "Object"
    validate (Array a) = a <?!> "Array"
    validate (String t) = t <?!> "String"
    validate (Number s) = s <?!> "Number"
    validate (Bool b) = b <?!> "Bool"
    validate Null = mempty