{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE NoImplicitPrelude, OverloadedStrings, UnicodeSyntax #-}

-- | Integrates the refinement types from the refined library with aeson.
module Magicbane.Validation (
  module Refined
) where


import           ClassyPrelude
import           Refined
import           Data.Aeson

instance ToJSON α  ToJSON (Refined ρ α) where
  toJSON = toJSON . unrefine

instance (FromJSON α, Predicate ρ α)  FromJSON (Refined ρ α) where
  parseJSON x = do
    res  parseJSON x
    case refine res of
      Right v  return v
      Left e  fail e