module Composite.Aeson.Formats.Default
( DefaultJsonFormat(..)
) where
import Composite.Aeson.Base (JsonFormat, wrappedJsonFormat)
import Composite.Aeson.Formats.InternalTH (makeTupleDefaults)
import Composite.Aeson.Formats.Provided
import qualified Data.Aeson as Aeson
import Data.Fixed (Fixed, HasResolution)
import Data.Functor.Compose (Compose)
import Data.Functor.Const (Const)
import Data.Functor.Identity (Identity)
import Data.HashMap.Strict (HashMap)
import Data.Int (Int8, Int16, Int32, Int64)
import Data.IntSet (IntSet)
import Data.List.NonEmpty (NonEmpty)
import Data.Map (Map)
import qualified Data.Monoid as Monoid
import Data.Scientific (Scientific)
import qualified Data.Semigroup as Semigroup
import Data.Sequence (Seq)
import Data.Tagged (Tagged)
import Data.Text (Text)
import qualified Data.Text.Lazy as TL
import Data.Vector (Vector)
import Data.Version (Version)
import Data.Word (Word8, Word16, Word32, Word64)
import Numeric.Natural (Natural)
class DefaultJsonFormat a where
defaultJsonFormat :: JsonFormat e a
defaultJsonFormatList :: JsonFormat e [a]
defaultJsonFormatList = forall e a. JsonFormat e a -> JsonFormat e [a]
listJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Identity a) where defaultJsonFormat :: forall e. JsonFormat e (Identity a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Min a) where defaultJsonFormat :: forall e. JsonFormat e (Min a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Max a) where defaultJsonFormat :: forall e. JsonFormat e (Max a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.First a) where defaultJsonFormat :: forall e. JsonFormat e (First a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Last a) where defaultJsonFormat :: forall e. JsonFormat e (Last a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.WrappedMonoid a) where defaultJsonFormat :: forall e. JsonFormat e (WrappedMonoid a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Dual a) where defaultJsonFormat :: forall e. JsonFormat e (Dual a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Sum a) where defaultJsonFormat :: forall e. JsonFormat e (Sum a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Product a) where defaultJsonFormat :: forall e. JsonFormat e (Product a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.First a) where defaultJsonFormat :: forall e. JsonFormat e (First a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Last a) where defaultJsonFormat :: forall e. JsonFormat e (Last a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Const a b) where defaultJsonFormat :: forall e. JsonFormat e (Const a b)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Tagged b a) where defaultJsonFormat :: forall e. JsonFormat e (Tagged b a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Maybe a) where defaultJsonFormat :: forall e. JsonFormat e (Maybe a)
defaultJsonFormat = forall e a. JsonFormat e a -> JsonFormat e (Maybe a)
maybeJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (NonEmpty a) where defaultJsonFormat :: forall e. JsonFormat e (NonEmpty a)
defaultJsonFormat = forall e a. JsonFormat e a -> JsonFormat e (NonEmpty a)
nonEmptyListJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Seq a) where defaultJsonFormat :: forall e. JsonFormat e (Seq a)
defaultJsonFormat = forall e a. JsonFormat e a -> JsonFormat e (Seq a)
seqJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Vector a) where defaultJsonFormat :: forall e. JsonFormat e (Vector a)
defaultJsonFormat = forall e a. JsonFormat e a -> JsonFormat e (Vector a)
vectorJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat (f (g a)) => DefaultJsonFormat (Compose f g a) where defaultJsonFormat :: forall e. JsonFormat e (Compose f g a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat (f a) => DefaultJsonFormat (Monoid.Alt f a) where defaultJsonFormat :: forall e. JsonFormat e (Alt f a)
defaultJsonFormat = forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Map Text a) where
defaultJsonFormat :: forall e. JsonFormat e (Map Text a)
defaultJsonFormat = forall k e a.
Ord k =>
(k -> Text)
-> (Text -> Parse e k) -> JsonFormat e a -> JsonFormat e (Map k a)
strictMapJsonFormat forall a. a -> a
id forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (HashMap Text a) where
defaultJsonFormat :: forall e. JsonFormat e (HashMap Text a)
defaultJsonFormat = forall k e a.
(Eq k, Hashable k) =>
(k -> Text)
-> (Text -> Parse e k)
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
strictHashMapJsonFormat forall a. a -> a
id forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance HasResolution a => DefaultJsonFormat (Fixed a) where defaultJsonFormat :: forall e. JsonFormat e (Fixed a)
defaultJsonFormat = forall {k} (r :: k) e. HasResolution r => JsonFormat e (Fixed r)
fixedJsonFormat
$