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 = JsonFormat e a -> JsonFormat e [a]
forall e a. JsonFormat e a -> JsonFormat e [a]
listJsonFormat JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Identity a) where defaultJsonFormat :: JsonFormat e (Identity a)
defaultJsonFormat = JsonFormat e (Unwrapped (Identity a)) -> JsonFormat e (Identity a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Identity a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Min a) where defaultJsonFormat :: JsonFormat e (Min a)
defaultJsonFormat = JsonFormat e (Unwrapped (Min a)) -> JsonFormat e (Min a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Min a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Max a) where defaultJsonFormat :: JsonFormat e (Max a)
defaultJsonFormat = JsonFormat e (Unwrapped (Max a)) -> JsonFormat e (Max a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Max a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.First a) where defaultJsonFormat :: JsonFormat e (First a)
defaultJsonFormat = JsonFormat e (Unwrapped (First a)) -> JsonFormat e (First a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (First a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.Last a) where defaultJsonFormat :: JsonFormat e (Last a)
defaultJsonFormat = JsonFormat e (Unwrapped (Last a)) -> JsonFormat e (Last a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Last a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Semigroup.WrappedMonoid a) where defaultJsonFormat :: JsonFormat e (WrappedMonoid a)
defaultJsonFormat = JsonFormat e (Unwrapped (WrappedMonoid a))
-> JsonFormat e (WrappedMonoid a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (WrappedMonoid a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Dual a) where defaultJsonFormat :: JsonFormat e (Dual a)
defaultJsonFormat = JsonFormat e (Unwrapped (Dual a)) -> JsonFormat e (Dual a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Dual a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Sum a) where defaultJsonFormat :: JsonFormat e (Sum a)
defaultJsonFormat = JsonFormat e (Unwrapped (Sum a)) -> JsonFormat e (Sum a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Sum a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Product a) where defaultJsonFormat :: JsonFormat e (Product a)
defaultJsonFormat = JsonFormat e (Unwrapped (Product a)) -> JsonFormat e (Product a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Product a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.First a) where defaultJsonFormat :: JsonFormat e (First a)
defaultJsonFormat = JsonFormat e (Unwrapped (First a)) -> JsonFormat e (First a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (First a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Monoid.Last a) where defaultJsonFormat :: JsonFormat e (Last a)
defaultJsonFormat = JsonFormat e (Unwrapped (Last a)) -> JsonFormat e (Last a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Last a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Const a b) where defaultJsonFormat :: JsonFormat e (Const a b)
defaultJsonFormat = JsonFormat e (Unwrapped (Const a b)) -> JsonFormat e (Const a b)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Const a b))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Tagged b a) where defaultJsonFormat :: JsonFormat e (Tagged b a)
defaultJsonFormat = JsonFormat e (Unwrapped (Tagged b a)) -> JsonFormat e (Tagged b a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Tagged b a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Maybe a) where defaultJsonFormat :: JsonFormat e (Maybe a)
defaultJsonFormat = JsonFormat e a -> JsonFormat e (Maybe a)
forall e a. JsonFormat e a -> JsonFormat e (Maybe a)
maybeJsonFormat JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (NonEmpty a) where defaultJsonFormat :: JsonFormat e (NonEmpty a)
defaultJsonFormat = JsonFormat e a -> JsonFormat e (NonEmpty a)
forall e a. JsonFormat e a -> JsonFormat e (NonEmpty a)
nonEmptyListJsonFormat JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Seq a) where defaultJsonFormat :: JsonFormat e (Seq a)
defaultJsonFormat = JsonFormat e a -> JsonFormat e (Seq a)
forall e a. JsonFormat e a -> JsonFormat e (Seq a)
seqJsonFormat JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Vector a) where defaultJsonFormat :: JsonFormat e (Vector a)
defaultJsonFormat = JsonFormat e a -> JsonFormat e (Vector a)
forall e a. JsonFormat e a -> JsonFormat e (Vector a)
vectorJsonFormat JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat (f (g a)) => DefaultJsonFormat (Compose f g a) where defaultJsonFormat :: JsonFormat e (Compose f g a)
defaultJsonFormat = JsonFormat e (Unwrapped (Compose f g a))
-> JsonFormat e (Compose f g a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Compose f g a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat (f a) => DefaultJsonFormat (Monoid.Alt f a) where defaultJsonFormat :: JsonFormat e (Alt f a)
defaultJsonFormat = JsonFormat e (Unwrapped (Alt f a)) -> JsonFormat e (Alt f a)
forall a e.
Wrapped a =>
JsonFormat e (Unwrapped a) -> JsonFormat e a
wrappedJsonFormat JsonFormat e (Unwrapped (Alt f a))
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (Map Text a) where
defaultJsonFormat :: JsonFormat e (Map Text a)
defaultJsonFormat = (Text -> Text)
-> (Text -> Parse e Text)
-> JsonFormat e a
-> JsonFormat e (Map Text a)
forall k e a.
Ord k =>
(k -> Text)
-> (Text -> Parse e k) -> JsonFormat e a -> JsonFormat e (Map k a)
strictMapJsonFormat Text -> Text
forall a. a -> a
id Text -> Parse e Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance DefaultJsonFormat a => DefaultJsonFormat (HashMap Text a) where
defaultJsonFormat :: JsonFormat e (HashMap Text a)
defaultJsonFormat = (Text -> Text)
-> (Text -> Parse e Text)
-> JsonFormat e a
-> JsonFormat e (HashMap Text a)
forall k e a.
(Eq k, Hashable k) =>
(k -> Text)
-> (Text -> Parse e k)
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
strictHashMapJsonFormat Text -> Text
forall a. a -> a
id Text -> Parse e Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure JsonFormat e a
forall a e. DefaultJsonFormat a => JsonFormat e a
defaultJsonFormat
instance HasResolution a => DefaultJsonFormat (Fixed a) where defaultJsonFormat :: JsonFormat e (Fixed a)
defaultJsonFormat = JsonFormat e (Fixed a)
forall k (r :: k) e. HasResolution r => JsonFormat e (Fixed r)
fixedJsonFormat