module Composite.Aeson.Formats.Provided where
import Composite.Aeson.Base (JsonFormat(JsonFormat), JsonProfunctor(JsonProfunctor), _JsonProfunctor, dimapJsonFormat, toJsonWithFormat)
import Composite.Aeson.Formats.Generic (SumStyle, abeJsonFormat, aesonJsonFormat, jsonArrayFormat, jsonObjectFormat, jsonSumFormat)
import Composite.Aeson.Formats.InternalTH (makeTupleFormats, makeNamedTupleFormats)
import Control.Arrow (first)
import Control.Monad.Except (throwError)
import Control.Lens (_2, _Wrapped, over, view)
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.BetterErrors as ABE
import Data.Fixed (HasResolution, Fixed)
import Data.Foldable (toList)
import Data.Hashable (Hashable)
import qualified Data.HashMap.Lazy as LazyHashMap
import qualified Data.HashMap.Strict as StrictHashMap
import Data.IntSet (IntSet)
import Data.List.NonEmpty (NonEmpty((:|)))
import qualified Data.List.NonEmpty as NEL
import qualified Data.Map.Lazy as LazyMap
import qualified Data.Map.Strict as StrictMap
import Data.Scientific (Scientific)
import qualified Data.Scientific as Scientific
import Data.Sequence (Seq)
import qualified Data.Sequence as Sequence
import Data.Text (Text)
import qualified Data.Text.Lazy as LT
import qualified Data.Vector as V
import Data.Version (Version)
import Numeric.Natural (Natural)
aesonArrayJsonFormat :: JsonFormat e Aeson.Array
aesonArrayJsonFormat :: JsonFormat e Array
aesonArrayJsonFormat = Parse e Array -> JsonFormat e Array
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Array
forall (m :: * -> *) err.
(Functor m, Monad m) =>
ParseT err m Array
ABE.asArray
aesonObjectJsonFormat :: JsonFormat e Aeson.Object
aesonObjectJsonFormat :: JsonFormat e Object
aesonObjectJsonFormat = Parse e Object -> JsonFormat e Object
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Object
forall (m :: * -> *) err.
(Functor m, Monad m) =>
ParseT err m Object
ABE.asObject
aesonValueJsonFormat :: JsonFormat e Aeson.Value
aesonValueJsonFormat :: JsonFormat e Value
aesonValueJsonFormat = Parse e Value -> JsonFormat e Value
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Value
forall (m :: * -> *) err.
(Functor m, Monad m) =>
ParseT err m Value
ABE.asValue
boolJsonFormat :: JsonFormat e Bool
boolJsonFormat :: JsonFormat e Bool
boolJsonFormat = Parse e Bool -> JsonFormat e Bool
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Bool
forall (m :: * -> *) err. (Functor m, Monad m) => ParseT err m Bool
ABE.asBool
charJsonFormat :: JsonFormat e Char
charJsonFormat :: JsonFormat e Char
charJsonFormat = JsonFormat e Char
forall a e. (ToJSON a, FromJSON a) => JsonFormat e a
aesonJsonFormat
eitherJsonFormat :: SumStyle -> Text -> Text -> JsonFormat e a -> JsonFormat e b -> JsonFormat e (Either a b)
eitherJsonFormat :: SumStyle
-> Text
-> Text
-> JsonFormat e a
-> JsonFormat e b
-> JsonFormat e (Either a b)
eitherJsonFormat SumStyle
style Text
leftName Text
rightName JsonFormat e a
leftFormat JsonFormat e b
rightFormat = SumStyle
-> (Either a b -> (Text, Value))
-> NonEmpty (Text, FromJson e (Either a b))
-> JsonFormat e (Either a b)
forall a e.
SumStyle
-> (a -> (Text, Value))
-> NonEmpty (Text, FromJson e a)
-> JsonFormat e a
jsonSumFormat SumStyle
style Either a b -> (Text, Value)
o NonEmpty (Text, FromJson e (Either a b))
is
where
o :: Either a b -> (Text, Value)
o = \ case
Left a
a -> (Text
leftName, JsonFormat e a -> a -> Value
forall e a. JsonFormat e a -> a -> Value
toJsonWithFormat JsonFormat e a
leftFormat a
a)
Right b
b -> (Text
rightName, JsonFormat e b -> b -> Value
forall e a. JsonFormat e a -> a -> Value
toJsonWithFormat JsonFormat e b
rightFormat b
b)
is :: NonEmpty (Text, FromJson e (Either a b))
is =
(Text
leftName, a -> Either a b
forall a b. a -> Either a b
Left (a -> Either a b) -> FromJson e a -> FromJson e (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Getting (FromJson e a) (JsonFormat e a) (FromJson e a)
-> JsonFormat e a -> FromJson e a
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a))
-> JsonFormat e a -> Const (FromJson e a) (JsonFormat e a)
forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t)
_Wrapped ((JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a))
-> JsonFormat e a -> Const (FromJson e a) (JsonFormat e a))
-> ((FromJson e a -> Const (FromJson e a) (FromJson e a))
-> JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a))
-> Getting (FromJson e a) (JsonFormat e a) (FromJson e a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ToJson a, FromJson e a)
-> Const (FromJson e a) (ToJson a, FromJson e a))
-> JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a)
forall e a b e' a' b'.
Iso
(JsonProfunctor e a b)
(JsonProfunctor e' a' b')
(ToJson a, FromJson e b)
(ToJson a', FromJson e' b')
_JsonProfunctor (((ToJson a, FromJson e a)
-> Const (FromJson e a) (ToJson a, FromJson e a))
-> JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a))
-> ((FromJson e a -> Const (FromJson e a) (FromJson e a))
-> (ToJson a, FromJson e a)
-> Const (FromJson e a) (ToJson a, FromJson e a))
-> (FromJson e a -> Const (FromJson e a) (FromJson e a))
-> JsonProfunctor e a a
-> Const (FromJson e a) (JsonProfunctor e a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FromJson e a -> Const (FromJson e a) (FromJson e a))
-> (ToJson a, FromJson e a)
-> Const (FromJson e a) (ToJson a, FromJson e a)
forall s t a b. Field2 s t a b => Lens s t a b
_2) JsonFormat e a
leftFormat) (Text, FromJson e (Either a b))
-> [(Text, FromJson e (Either a b))]
-> NonEmpty (Text, FromJson e (Either a b))
forall a. a -> [a] -> NonEmpty a
:| [(Text
rightName, b -> Either a b
forall a b. b -> Either a b
Right (b -> Either a b) -> FromJson e b -> FromJson e (Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Getting (FromJson e b) (JsonFormat e b) (FromJson e b)
-> JsonFormat e b -> FromJson e b
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b))
-> JsonFormat e b -> Const (FromJson e b) (JsonFormat e b)
forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t)
_Wrapped ((JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b))
-> JsonFormat e b -> Const (FromJson e b) (JsonFormat e b))
-> ((FromJson e b -> Const (FromJson e b) (FromJson e b))
-> JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b))
-> Getting (FromJson e b) (JsonFormat e b) (FromJson e b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((ToJson b, FromJson e b)
-> Const (FromJson e b) (ToJson b, FromJson e b))
-> JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b)
forall e a b e' a' b'.
Iso
(JsonProfunctor e a b)
(JsonProfunctor e' a' b')
(ToJson a, FromJson e b)
(ToJson a', FromJson e' b')
_JsonProfunctor (((ToJson b, FromJson e b)
-> Const (FromJson e b) (ToJson b, FromJson e b))
-> JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b))
-> ((FromJson e b -> Const (FromJson e b) (FromJson e b))
-> (ToJson b, FromJson e b)
-> Const (FromJson e b) (ToJson b, FromJson e b))
-> (FromJson e b -> Const (FromJson e b) (FromJson e b))
-> JsonProfunctor e b b
-> Const (FromJson e b) (JsonProfunctor e b b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FromJson e b -> Const (FromJson e b) (FromJson e b))
-> (ToJson b, FromJson e b)
-> Const (FromJson e b) (ToJson b, FromJson e b)
forall s t a b. Field2 s t a b => Lens s t a b
_2) JsonFormat e b
rightFormat)]
fixedJsonFormat :: HasResolution r => JsonFormat e (Fixed r)
fixedJsonFormat :: JsonFormat e (Fixed r)
fixedJsonFormat = JsonFormat e (Fixed r)
forall a e. (ToJSON a, FromJSON a) => JsonFormat e a
aesonJsonFormat
strictHashMapJsonFormat :: (Eq k, Hashable k) => (k -> Text) -> (Text -> ABE.Parse e k) -> JsonFormat e a -> JsonFormat e (StrictHashMap.HashMap k a)
strictHashMapJsonFormat :: (k -> Text)
-> (Text -> Parse e k)
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
strictHashMapJsonFormat k -> Text
kToText Text -> Parse e k
kFromText =
(HashMap k a -> [(Text, a)])
-> ([(Text, a)] -> Parse e (HashMap k a))
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
forall t a e.
(t -> [(Text, a)])
-> ([(Text, a)] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonObjectFormat (((k, a) -> (Text, a)) -> [(k, a)] -> [(Text, a)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((k -> Text) -> (k, a) -> (Text, a)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first k -> Text
kToText) ([(k, a)] -> [(Text, a)])
-> (HashMap k a -> [(k, a)]) -> HashMap k a -> [(Text, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashMap k a -> [(k, a)]
forall k v. HashMap k v -> [(k, v)]
StrictHashMap.toList)
(([(k, a)] -> HashMap k a)
-> ParseT e Identity [(k, a)] -> Parse e (HashMap k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> HashMap k a
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
StrictHashMap.fromList (ParseT e Identity [(k, a)] -> Parse e (HashMap k a))
-> ([(Text, a)] -> ParseT e Identity [(k, a)])
-> [(Text, a)]
-> Parse e (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Text, a) -> ParseT e Identity (k, a))
-> [(Text, a)] -> ParseT e Identity [(k, a)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\ (Text
k, a
a) -> (, a
a) (k -> (k, a)) -> Parse e k -> ParseT e Identity (k, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parse e k
kFromText Text
k))
lazyHashMapJsonFormat :: (Eq k, Hashable k) => (k -> Text) -> (Text -> ABE.Parse e k) -> JsonFormat e a -> JsonFormat e (LazyHashMap.HashMap k a)
lazyHashMapJsonFormat :: (k -> Text)
-> (Text -> Parse e k)
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
lazyHashMapJsonFormat k -> Text
kToText Text -> Parse e k
kFromText =
(HashMap k a -> [(Text, a)])
-> ([(Text, a)] -> Parse e (HashMap k a))
-> JsonFormat e a
-> JsonFormat e (HashMap k a)
forall t a e.
(t -> [(Text, a)])
-> ([(Text, a)] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonObjectFormat (((k, a) -> (Text, a)) -> [(k, a)] -> [(Text, a)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((k -> Text) -> (k, a) -> (Text, a)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first k -> Text
kToText) ([(k, a)] -> [(Text, a)])
-> (HashMap k a -> [(k, a)]) -> HashMap k a -> [(Text, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashMap k a -> [(k, a)]
forall k v. HashMap k v -> [(k, v)]
LazyHashMap.toList)
(([(k, a)] -> HashMap k a)
-> ParseT e Identity [(k, a)] -> Parse e (HashMap k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> HashMap k a
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
LazyHashMap.fromList (ParseT e Identity [(k, a)] -> Parse e (HashMap k a))
-> ([(Text, a)] -> ParseT e Identity [(k, a)])
-> [(Text, a)]
-> Parse e (HashMap k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Text, a) -> ParseT e Identity (k, a))
-> [(Text, a)] -> ParseT e Identity [(k, a)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\ (Text
k, a
a) -> (, a
a) (k -> (k, a)) -> Parse e k -> ParseT e Identity (k, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parse e k
kFromText Text
k))
intSetJsonFormat :: JsonFormat e IntSet
intSetJsonFormat :: JsonFormat e IntSet
intSetJsonFormat = JsonFormat e IntSet
forall a e. (ToJSON a, FromJSON a) => JsonFormat e a
aesonJsonFormat
integralJsonFormat :: Integral a => JsonFormat e a
integralJsonFormat :: JsonFormat e a
integralJsonFormat = JsonProfunctor e a a -> JsonFormat e a
forall e a. JsonProfunctor e a a -> JsonFormat e a
JsonFormat (JsonProfunctor e a a -> JsonFormat e a)
-> JsonProfunctor e a a -> JsonFormat e a
forall a b. (a -> b) -> a -> b
$ (a -> Value) -> Parse e a -> JsonProfunctor e a a
forall e a b. (a -> Value) -> Parse e b -> JsonProfunctor e a b
JsonProfunctor (Scientific -> Value
Aeson.Number (Scientific -> Value) -> (a -> Scientific) -> a -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Scientific
forall a b. (Integral a, Num b) => a -> b
fromIntegral) Parse e a
forall (m :: * -> *) a err.
(Functor m, Monad m, Integral a) =>
ParseT err m a
ABE.asIntegral
lazyTextJsonFormat :: JsonFormat e LT.Text
lazyTextJsonFormat :: JsonFormat e Text
lazyTextJsonFormat = (Text -> Text)
-> (Text -> Text) -> JsonFormat e Text -> JsonFormat e Text
forall b a e.
(b -> a) -> (a -> b) -> JsonFormat e a -> JsonFormat e b
dimapJsonFormat Text -> Text
LT.toStrict Text -> Text
LT.fromStrict JsonFormat e Text
forall e. JsonFormat e Text
textJsonFormat
listJsonFormat :: JsonFormat e a -> JsonFormat e [a]
listJsonFormat :: JsonFormat e a -> JsonFormat e [a]
listJsonFormat = ([a] -> [a])
-> ([a] -> Parse e [a]) -> JsonFormat e a -> JsonFormat e [a]
forall t a e.
(t -> [a])
-> ([a] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonArrayFormat [a] -> [a]
forall a. a -> a
id [a] -> Parse e [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure
strictMapJsonFormat :: Ord k => (k -> Text) -> (Text -> ABE.Parse e k) -> JsonFormat e a -> JsonFormat e (StrictMap.Map k a)
strictMapJsonFormat :: (k -> Text)
-> (Text -> Parse e k) -> JsonFormat e a -> JsonFormat e (Map k a)
strictMapJsonFormat k -> Text
kToText Text -> Parse e k
kFromText =
(Map k a -> [(Text, a)])
-> ([(Text, a)] -> Parse e (Map k a))
-> JsonFormat e a
-> JsonFormat e (Map k a)
forall t a e.
(t -> [(Text, a)])
-> ([(Text, a)] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonObjectFormat (((k, a) -> (Text, a)) -> [(k, a)] -> [(Text, a)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((k -> Text) -> (k, a) -> (Text, a)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first k -> Text
kToText) ([(k, a)] -> [(Text, a)])
-> (Map k a -> [(k, a)]) -> Map k a -> [(Text, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
StrictMap.toAscList)
(([(k, a)] -> Map k a)
-> ParseT e Identity [(k, a)] -> Parse e (Map k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> Map k a
forall k a. Ord k => [(k, a)] -> Map k a
StrictMap.fromList (ParseT e Identity [(k, a)] -> Parse e (Map k a))
-> ([(Text, a)] -> ParseT e Identity [(k, a)])
-> [(Text, a)]
-> Parse e (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Text, a) -> ParseT e Identity (k, a))
-> [(Text, a)] -> ParseT e Identity [(k, a)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\ (Text
k, a
a) -> (, a
a) (k -> (k, a)) -> Parse e k -> ParseT e Identity (k, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parse e k
kFromText Text
k))
lazyMapJsonFormat :: Ord k => (k -> Text) -> (Text -> ABE.Parse e k) -> JsonFormat e a -> JsonFormat e (LazyMap.Map k a)
lazyMapJsonFormat :: (k -> Text)
-> (Text -> Parse e k) -> JsonFormat e a -> JsonFormat e (Map k a)
lazyMapJsonFormat k -> Text
kToText Text -> Parse e k
kFromText =
(Map k a -> [(Text, a)])
-> ([(Text, a)] -> Parse e (Map k a))
-> JsonFormat e a
-> JsonFormat e (Map k a)
forall t a e.
(t -> [(Text, a)])
-> ([(Text, a)] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonObjectFormat (((k, a) -> (Text, a)) -> [(k, a)] -> [(Text, a)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((k -> Text) -> (k, a) -> (Text, a)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first k -> Text
kToText) ([(k, a)] -> [(Text, a)])
-> (Map k a -> [(k, a)]) -> Map k a -> [(Text, a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
LazyMap.toAscList)
(([(k, a)] -> Map k a)
-> ParseT e Identity [(k, a)] -> Parse e (Map k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, a)] -> Map k a
forall k a. Ord k => [(k, a)] -> Map k a
LazyMap.fromList (ParseT e Identity [(k, a)] -> Parse e (Map k a))
-> ([(Text, a)] -> ParseT e Identity [(k, a)])
-> [(Text, a)]
-> Parse e (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Text, a) -> ParseT e Identity (k, a))
-> [(Text, a)] -> ParseT e Identity [(k, a)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\ (Text
k, a
a) -> (, a
a) (k -> (k, a)) -> Parse e k -> ParseT e Identity (k, a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Parse e k
kFromText Text
k))
maybeJsonFormat :: JsonFormat e a -> JsonFormat e (Maybe a)
maybeJsonFormat :: JsonFormat e a -> JsonFormat e (Maybe a)
maybeJsonFormat =
ASetter
(JsonFormat e a)
(JsonFormat e (Maybe a))
(JsonProfunctor e a a)
(JsonProfunctor e (Maybe a) (Maybe a))
-> (JsonProfunctor e a a -> JsonProfunctor e (Maybe a) (Maybe a))
-> JsonFormat e a
-> JsonFormat e (Maybe a)
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over ASetter
(JsonFormat e a)
(JsonFormat e (Maybe a))
(JsonProfunctor e a a)
(JsonProfunctor e (Maybe a) (Maybe a))
forall s t. Rewrapping s t => Iso s t (Unwrapped s) (Unwrapped t)
_Wrapped ((JsonProfunctor e a a -> JsonProfunctor e (Maybe a) (Maybe a))
-> JsonFormat e a -> JsonFormat e (Maybe a))
-> (JsonProfunctor e a a -> JsonProfunctor e (Maybe a) (Maybe a))
-> JsonFormat e a
-> JsonFormat e (Maybe a)
forall a b. (a -> b) -> a -> b
$ \ (JsonProfunctor a -> Value
o Parse e a
i) ->
(Maybe a -> Value)
-> Parse e (Maybe a) -> JsonProfunctor e (Maybe a) (Maybe a)
forall e a b. (a -> Value) -> Parse e b -> JsonProfunctor e a b
JsonProfunctor (Value -> (a -> Value) -> Maybe a -> Value
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Value
Aeson.Null a -> Value
o) (Parse e a -> Parse e (Maybe a)
forall (m :: * -> *) err a.
(Functor m, Monad m) =>
ParseT err m a -> ParseT err m (Maybe a)
ABE.perhaps Parse e a
i)
naturalJsonFormat :: JsonFormat e Natural
naturalJsonFormat :: JsonFormat e Natural
naturalJsonFormat = JsonFormat e Natural
forall a e. (ToJSON a, FromJSON a) => JsonFormat e a
aesonJsonFormat
nonEmptyListJsonFormat :: JsonFormat e a -> JsonFormat e (NonEmpty a)
nonEmptyListJsonFormat :: JsonFormat e a -> JsonFormat e (NonEmpty a)
nonEmptyListJsonFormat =
(NonEmpty a -> [a])
-> ([a] -> Parse e (NonEmpty a))
-> JsonFormat e a
-> JsonFormat e (NonEmpty a)
forall t a e.
(t -> [a])
-> ([a] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonArrayFormat NonEmpty a -> [a]
forall a. NonEmpty a -> [a]
NEL.toList (Parse e (NonEmpty a)
-> (NonEmpty a -> Parse e (NonEmpty a))
-> Maybe (NonEmpty a)
-> Parse e (NonEmpty a)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (ParseError e -> Parse e (NonEmpty a)
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (ParseError e -> Parse e (NonEmpty a))
-> ParseError e -> Parse e (NonEmpty a)
forall a b. (a -> b) -> a -> b
$ String -> ParseError e
forall err. String -> ParseError err
ABE.InvalidJSON (String -> ParseError e) -> String -> ParseError e
forall a b. (a -> b) -> a -> b
$ String -> String
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"expected nonempty array") NonEmpty a -> Parse e (NonEmpty a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe (NonEmpty a) -> Parse e (NonEmpty a))
-> ([a] -> Maybe (NonEmpty a)) -> [a] -> Parse e (NonEmpty a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Maybe (NonEmpty a)
forall a. [a] -> Maybe (NonEmpty a)
NEL.nonEmpty)
nullJsonFormat :: JsonFormat e ()
nullJsonFormat :: JsonFormat e ()
nullJsonFormat = Parse e () -> JsonFormat e ()
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e ()
forall (m :: * -> *) err. (Functor m, Monad m) => ParseT err m ()
ABE.asNull
orderingJsonFormat :: JsonFormat e Ordering
orderingJsonFormat :: JsonFormat e Ordering
orderingJsonFormat = JsonFormat e Ordering
forall a e. (ToJSON a, FromJSON a) => JsonFormat e a
aesonJsonFormat
realFloatJsonFormat :: RealFloat a => JsonFormat e a
realFloatJsonFormat :: JsonFormat e a
realFloatJsonFormat = JsonProfunctor e a a -> JsonFormat e a
forall e a. JsonProfunctor e a a -> JsonFormat e a
JsonFormat (JsonProfunctor e a a -> JsonFormat e a)
-> JsonProfunctor e a a -> JsonFormat e a
forall a b. (a -> b) -> a -> b
$ (a -> Value) -> Parse e a -> JsonProfunctor e a a
forall e a b. (a -> Value) -> Parse e b -> JsonProfunctor e a b
JsonProfunctor a -> Value
forall a. RealFloat a => a -> Value
realFloatToJson Parse e a
forall (m :: * -> *) a err.
(Functor m, Monad m, RealFloat a) =>
ParseT err m a
ABE.asRealFloat
realFloatToJson :: RealFloat a => a -> Aeson.Value
realFloatToJson :: a -> Value
realFloatToJson a
d
| a -> Bool
forall a. RealFloat a => a -> Bool
isNaN a
d Bool -> Bool -> Bool
|| a -> Bool
forall a. RealFloat a => a -> Bool
isInfinite a
d = Value
Aeson.Null
| Bool
otherwise = Scientific -> Value
Aeson.Number (Scientific -> Value) -> Scientific -> Value
forall a b. (a -> b) -> a -> b
$ a -> Scientific
forall a. RealFloat a => a -> Scientific
Scientific.fromFloatDigits a
d
{-# INLINE realFloatToJson #-}
scientificJsonFormat :: JsonFormat e Scientific
scientificJsonFormat :: JsonFormat e Scientific
scientificJsonFormat = Parse e Scientific -> JsonFormat e Scientific
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Scientific
forall (m :: * -> *) err.
(Functor m, Monad m) =>
ParseT err m Scientific
ABE.asScientific
seqJsonFormat :: JsonFormat e a -> JsonFormat e (Seq a)
seqJsonFormat :: JsonFormat e a -> JsonFormat e (Seq a)
seqJsonFormat = (Seq a -> [a])
-> ([a] -> Parse e (Seq a))
-> JsonFormat e a
-> JsonFormat e (Seq a)
forall t a e.
(t -> [a])
-> ([a] -> Parse e t) -> JsonFormat e a -> JsonFormat e t
jsonArrayFormat Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList (Seq a -> Parse e (Seq a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Seq a -> Parse e (Seq a))
-> ([a] -> Seq a) -> [a] -> Parse e (Seq a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Seq a
forall a. [a] -> Seq a
Sequence.fromList)
stringJsonFormat :: JsonFormat e String
stringJsonFormat :: JsonFormat e String
stringJsonFormat = Parse e String -> JsonFormat e String
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e String
forall (m :: * -> *) err.
(Functor m, Monad m) =>
ParseT err m String
ABE.asString
textJsonFormat :: JsonFormat e Text
textJsonFormat :: JsonFormat e Text
textJsonFormat = Parse e Text -> JsonFormat e Text
forall a e. ToJSON a => Parse e a -> JsonFormat e a
abeJsonFormat Parse e Text
forall (m :: * -> *) err. (Functor m, Monad m) => ParseT err m Text
ABE.asText