{-# LANGUAGE CPP #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
module Lens.Micro.Aeson
(
AsNumber(..)
, _Integral
, nonNull
, AsValue(..)
, key, members
, nth, values
, AsJSON(..)
) where
import Data.Aeson
import qualified Data.Aeson.KeyMap as KM
import qualified Data.ByteString as Strict
import Data.ByteString.Lazy.Char8 as Lazy
import Data.Scientific (Scientific)
import qualified Data.Scientific as Scientific
import Data.Text as Text
import qualified Data.Text.Encoding as StrictText
import qualified Data.Text.Lazy as LazyText
import qualified Data.Text.Lazy.Encoding as LazyText
import Data.Vector (Vector)
import qualified Data.Vector as V
import Lens.Micro
import Lens.Micro.Aeson.Internal ()
import Prelude
#if !MIN_VERSION_aeson(2,2,0)
import Data.Aeson.Parser (value)
import Data.Attoparsec.ByteString.Lazy (maybeResult, parse)
#endif
class AsNumber t where
_Number :: Traversal' t Scientific
default _Number :: AsValue t => Traversal' t Scientific
_Number = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((Scientific -> f Scientific) -> Value -> f Value)
-> (Scientific -> f Scientific)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> f Scientific) -> Value -> f Value
forall t. AsNumber t => Traversal' t Scientific
Traversal' Value Scientific
_Number
{-# INLINE _Number #-}
_Double :: Traversal' t Double
_Double = (Scientific -> f Scientific) -> t -> f t
forall t. AsNumber t => Traversal' t Scientific
Traversal' t Scientific
_Number ((Scientific -> f Scientific) -> t -> f t)
-> ((Double -> f Double) -> Scientific -> f Scientific)
-> (Double -> f Double)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> Double)
-> (Scientific -> Double -> Scientific)
-> Lens Scientific Scientific Double Double
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Scientific -> Double
forall a. RealFloat a => Scientific -> a
Scientific.toRealFloat ((Double -> Scientific) -> Scientific -> Double -> Scientific
forall a b. a -> b -> a
const Double -> Scientific
forall a b. (Real a, Fractional b) => a -> b
realToFrac)
{-# INLINE _Double #-}
_Integer :: Traversal' t Integer
_Integer = (Scientific -> f Scientific) -> t -> f t
forall t. AsNumber t => Traversal' t Scientific
Traversal' t Scientific
_Number ((Scientific -> f Scientific) -> t -> f t)
-> ((Integer -> f Integer) -> Scientific -> f Scientific)
-> (Integer -> f Integer)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> Integer)
-> (Scientific -> Integer -> Scientific)
-> Lens Scientific Scientific Integer Integer
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Scientific -> Integer
forall b. Integral b => Scientific -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor ((Integer -> Scientific) -> Scientific -> Integer -> Scientific
forall a b. a -> b -> a
const Integer -> Scientific
forall a b. (Integral a, Num b) => a -> b
fromIntegral)
{-# INLINE _Integer #-}
instance AsNumber Value where
_Number :: Traversal' Value Scientific
_Number Scientific -> f Scientific
f (Number Scientific
n) = Scientific -> Value
Number (Scientific -> Value) -> f Scientific -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Scientific -> f Scientific
f Scientific
n
_Number Scientific -> f Scientific
_ Value
v = Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _Number #-}
instance AsNumber Scientific where
_Number :: Traversal' Scientific Scientific
_Number = (Scientific -> f Scientific) -> Scientific -> f Scientific
forall a. a -> a
id
{-# INLINE _Number #-}
instance AsNumber Strict.ByteString
instance AsNumber Lazy.ByteString
instance AsNumber Text
instance AsNumber LazyText.Text
instance AsNumber String
_Integral :: (AsNumber t, Integral a) => Traversal' t a
_Integral :: forall t a. (AsNumber t, Integral a) => Traversal' t a
_Integral = (Scientific -> f Scientific) -> t -> f t
forall t. AsNumber t => Traversal' t Scientific
Traversal' t Scientific
_Number ((Scientific -> f Scientific) -> t -> f t)
-> ((a -> f a) -> Scientific -> f Scientific)
-> (a -> f a)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Scientific -> a)
-> (Scientific -> a -> Scientific)
-> Lens Scientific Scientific a a
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Scientific -> a
forall b. Integral b => Scientific -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor ((a -> Scientific) -> Scientific -> a -> Scientific
forall a b. a -> b -> a
const a -> Scientific
forall a b. (Integral a, Num b) => a -> b
fromIntegral)
{-# INLINE _Integral #-}
nonNull :: Traversal' Value Value
nonNull :: Traversal' Value Value
nonNull Value -> f Value
_ Value
Null = Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
Null
nonNull Value -> f Value
f Value
v = (Value -> f Value) -> Value -> f Value
forall t. AsValue t => Traversal' t Value
Traversal' Value Value
_Value Value -> f Value
f Value
v
{-# INLINE nonNull #-}
class AsNumber t => AsValue t where
_Value :: Traversal' t Value
_String :: Traversal' t Text
_String = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((Text -> f Text) -> Value -> f Value)
-> (Text -> f Text)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> f Text) -> Value -> f Value
forall {f :: * -> *}.
Applicative f =>
(Text -> f Text) -> Value -> f Value
trav
where trav :: (Text -> f Text) -> Value -> f Value
trav Text -> f Text
f (String Text
s) = Text -> Value
String (Text -> Value) -> f Text -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> f Text
f Text
s
trav Text -> f Text
_ Value
v = Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _String #-}
_Bool :: Traversal' t Bool
_Bool = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((Bool -> f Bool) -> Value -> f Value)
-> (Bool -> f Bool)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Bool -> f Bool) -> Value -> f Value
forall {f :: * -> *}.
Applicative f =>
(Bool -> f Bool) -> Value -> f Value
trav
where trav :: (Bool -> f Bool) -> Value -> f Value
trav Bool -> f Bool
f (Bool Bool
b) = Bool -> Value
Bool (Bool -> Value) -> f Bool -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> f Bool
f Bool
b
trav Bool -> f Bool
_ Value
v = Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _Bool #-}
_Null :: Traversal' t ()
_Null = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((() -> f ()) -> Value -> f Value) -> (() -> f ()) -> t -> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (() -> f ()) -> Value -> f Value
forall {f :: * -> *} {b}.
Applicative f =>
(() -> f b) -> Value -> f Value
trav
where trav :: (() -> f b) -> Value -> f Value
trav () -> f b
f Value
Null = Value
Null Value -> f b -> f Value
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ () -> f b
f ()
trav () -> f b
_ Value
v = Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _Null #-}
_Object :: Traversal' t (KM.KeyMap Value)
_Object = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((KeyMap Value -> f (KeyMap Value)) -> Value -> f Value)
-> (KeyMap Value -> f (KeyMap Value))
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \KeyMap Value -> f (KeyMap Value)
f Value
v -> case Value
v of Object KeyMap Value
o -> KeyMap Value -> Value
Object (KeyMap Value -> Value) -> f (KeyMap Value) -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> KeyMap Value -> f (KeyMap Value)
f KeyMap Value
o; Value
_ -> Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _Object #-}
_Array :: Traversal' t (Vector Value)
_Array = (Value -> f Value) -> t -> f t
forall t. AsValue t => Traversal' t Value
Traversal' t Value
_Value ((Value -> f Value) -> t -> f t)
-> ((Vector Value -> f (Vector Value)) -> Value -> f Value)
-> (Vector Value -> f (Vector Value))
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \Vector Value -> f (Vector Value)
f Value
v -> case Value
v of Array Vector Value
a -> Vector Value -> Value
Array (Vector Value -> Value) -> f (Vector Value) -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Vector Value -> f (Vector Value)
f Vector Value
a; Value
_ -> Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _Array #-}
instance AsValue Value where
_Value :: Traversal' Value Value
_Value = (Value -> f Value) -> Value -> f Value
forall a. a -> a
id
{-# INLINE _Value #-}
instance AsValue Strict.ByteString where
_Value :: Traversal' ByteString Value
_Value = (Value -> f Value) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString Value
_JSON
{-# INLINE _Value #-}
instance AsValue Lazy.ByteString where
_Value :: Traversal' ByteString Value
_Value = (Value -> f Value) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString Value
_JSON
{-# INLINE _Value #-}
instance AsValue String where
_Value :: Traversal' String Value
_Value = (ByteString -> f ByteString) -> String -> f String
Lens' String ByteString
strictUtf8 ((ByteString -> f ByteString) -> String -> f String)
-> ((Value -> f Value) -> ByteString -> f ByteString)
-> (Value -> f Value)
-> String
-> f String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString Value
_JSON
{-# INLINE _Value #-}
instance AsValue Text where
_Value :: Traversal' Text Value
_Value = (ByteString -> f ByteString) -> Text -> f Text
Lens' Text ByteString
strictTextUtf8 ((ByteString -> f ByteString) -> Text -> f Text)
-> ((Value -> f Value) -> ByteString -> f ByteString)
-> (Value -> f Value)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString Value
_JSON
{-# INLINE _Value #-}
instance AsValue LazyText.Text where
_Value :: Traversal' Text Value
_Value = (ByteString -> f ByteString) -> Text -> f Text
Lens' Text ByteString
lazyTextUtf8 ((ByteString -> f ByteString) -> Text -> f Text)
-> ((Value -> f Value) -> ByteString -> f ByteString)
-> (Value -> f Value)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString Value
_JSON
{-# INLINE _Value #-}
key :: AsValue t => Key -> Traversal' t Value
key :: forall t. AsValue t => Key -> Traversal' t Value
key Key
i = (KeyMap Value -> f (KeyMap Value)) -> t -> f t
forall t. AsValue t => Traversal' t (KeyMap Value)
Traversal' t (KeyMap Value)
_Object ((KeyMap Value -> f (KeyMap Value)) -> t -> f t)
-> ((Value -> f Value) -> KeyMap Value -> f (KeyMap Value))
-> (Value -> f Value)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Index (KeyMap Value)
-> Traversal' (KeyMap Value) (IxValue (KeyMap Value))
forall m. Ixed m => Index m -> Traversal' m (IxValue m)
ix Key
Index (KeyMap Value)
i
{-# INLINE key #-}
members :: AsValue t => Traversal' t Value
members :: forall t. AsValue t => Traversal' t Value
members = (KeyMap Value -> f (KeyMap Value)) -> t -> f t
forall t. AsValue t => Traversal' t (KeyMap Value)
Traversal' t (KeyMap Value)
_Object ((KeyMap Value -> f (KeyMap Value)) -> t -> f t)
-> ((Value -> f Value) -> KeyMap Value -> f (KeyMap Value))
-> (Value -> f Value)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> KeyMap Value -> f (KeyMap Value)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> KeyMap a -> f (KeyMap b)
traverse
{-# INLINE members #-}
nth :: AsValue t => Int -> Traversal' t Value
nth :: forall t. AsValue t => Int -> Traversal' t Value
nth Int
i = (Vector Value -> f (Vector Value)) -> t -> f t
forall t. AsValue t => Traversal' t (Vector Value)
Traversal' t (Vector Value)
_Array ((Vector Value -> f (Vector Value)) -> t -> f t)
-> ((Value -> f Value) -> Vector Value -> f (Vector Value))
-> (Value -> f Value)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> Vector Value -> f (Vector Value)
forall {f :: * -> *} {a}.
Applicative f =>
(a -> f a) -> Vector a -> f (Vector a)
vectorIxI
where
vectorIxI :: (a -> f a) -> Vector a -> f (Vector a)
vectorIxI a -> f a
f Vector a
a
| Int
0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
i Bool -> Bool -> Bool
&& Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Vector a -> Int
forall a. Vector a -> Int
V.length Vector a
a = a -> f a
f (Vector a
a Vector a -> Int -> a
forall a. Vector a -> Int -> a
V.! Int
i) f a -> (a -> Vector a) -> f (Vector a)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \a
v -> Vector a
a Vector a -> [(Int, a)] -> Vector a
forall a. Vector a -> [(Int, a)] -> Vector a
V.// [(Int
i, a
v)]
| Bool
otherwise = Vector a -> f (Vector a)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Vector a
a
{-# INLINE nth #-}
values :: AsValue t => Traversal' t Value
values :: forall t. AsValue t => Traversal' t Value
values = (Vector Value -> f (Vector Value)) -> t -> f t
forall t. AsValue t => Traversal' t (Vector Value)
Traversal' t (Vector Value)
_Array ((Vector Value -> f (Vector Value)) -> t -> f t)
-> ((Value -> f Value) -> Vector Value -> f (Vector Value))
-> (Value -> f Value)
-> t
-> f t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Value -> f Value) -> Vector Value -> f (Vector Value)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Vector a -> f (Vector b)
traverse
{-# INLINE values #-}
strictUtf8 :: Lens' String Strict.ByteString
strictUtf8 :: Lens' String ByteString
strictUtf8 = (String -> Text)
-> (String -> Text -> String) -> Lens String String Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens String -> Text
Text.pack ((Text -> String) -> String -> Text -> String
forall a b. a -> b -> a
const Text -> String
Text.unpack) ((Text -> f Text) -> String -> f String)
-> ((ByteString -> f ByteString) -> Text -> f Text)
-> (ByteString -> f ByteString)
-> String
-> f String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> f ByteString) -> Text -> f Text
Lens' Text ByteString
strictTextUtf8
lazyUtf8 :: Lens' Strict.ByteString Lazy.ByteString
lazyUtf8 :: Lens' ByteString ByteString
lazyUtf8 = (ByteString -> ByteString)
-> (ByteString -> ByteString -> ByteString)
-> Lens' ByteString ByteString
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens ByteString -> ByteString
Lazy.fromStrict ((ByteString -> ByteString)
-> ByteString -> ByteString -> ByteString
forall a b. a -> b -> a
const ByteString -> ByteString
Lazy.toStrict)
strictTextUtf8 :: Lens' Text.Text Strict.ByteString
strictTextUtf8 :: Lens' Text ByteString
strictTextUtf8 = (Text -> ByteString)
-> (Text -> ByteString -> Text) -> Lens' Text ByteString
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Text -> ByteString
StrictText.encodeUtf8 ((ByteString -> Text) -> Text -> ByteString -> Text
forall a b. a -> b -> a
const ByteString -> Text
StrictText.decodeUtf8)
lazyTextUtf8 :: Lens' LazyText.Text Lazy.ByteString
lazyTextUtf8 :: Lens' Text ByteString
lazyTextUtf8 = (Text -> ByteString)
-> (Text -> ByteString -> Text) -> Lens' Text ByteString
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Text -> ByteString
LazyText.encodeUtf8 ((ByteString -> Text) -> Text -> ByteString -> Text
forall a b. a -> b -> a
const ByteString -> Text
LazyText.decodeUtf8)
class AsJSON t where
_JSON :: (FromJSON a, ToJSON a) => Traversal' t a
instance AsJSON Strict.ByteString where
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
_JSON = (ByteString -> f ByteString) -> ByteString -> f ByteString
Lens' ByteString ByteString
lazyUtf8 ((ByteString -> f ByteString) -> ByteString -> f ByteString)
-> ((a -> f a) -> ByteString -> f ByteString)
-> (a -> f a)
-> ByteString
-> f ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString a
_JSON
{-# INLINE _JSON #-}
instance AsJSON Lazy.ByteString where
#if MIN_VERSION_aeson(2,2,0)
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
_JSON a -> f a
f ByteString
b = f ByteString -> (a -> f ByteString) -> Maybe a -> f ByteString
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (ByteString -> f ByteString
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ByteString
b) ((a -> ByteString) -> f a -> f ByteString
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> ByteString
forall a. ToJSON a => a -> ByteString
encode (f a -> f ByteString) -> (a -> f a) -> a -> f ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> f a
f) (ByteString -> Maybe a
forall a. FromJSON a => ByteString -> Maybe a
decode ByteString
b)
#else
_JSON f b = maybe (pure b) (fmap encode . f) v
where v = maybeResult (parse value b) >>= \x -> case fromJSON x of
Success x' -> Just x'
_ -> Nothing
#endif
{-# INLINE _JSON #-}
instance AsJSON String where
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' String a
_JSON = (ByteString -> f ByteString) -> String -> f String
Lens' String ByteString
strictUtf8 ((ByteString -> f ByteString) -> String -> f String)
-> ((a -> f a) -> ByteString -> f ByteString)
-> (a -> f a)
-> String
-> f String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString a
_JSON
{-# INLINE _JSON #-}
instance AsJSON Text where
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' Text a
_JSON = (ByteString -> f ByteString) -> Text -> f Text
Lens' Text ByteString
strictTextUtf8 ((ByteString -> f ByteString) -> Text -> f Text)
-> ((a -> f a) -> ByteString -> f ByteString)
-> (a -> f a)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString a
_JSON
{-# INLINE _JSON #-}
instance AsJSON LazyText.Text where
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' Text a
_JSON = (ByteString -> f ByteString) -> Text -> f Text
Lens' Text ByteString
lazyTextUtf8 ((ByteString -> f ByteString) -> Text -> f Text)
-> ((a -> f a) -> ByteString -> f ByteString)
-> (a -> f a)
-> Text
-> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> f a) -> ByteString -> f ByteString
forall a. (FromJSON a, ToJSON a) => Traversal' ByteString a
forall t a. (AsJSON t, FromJSON a, ToJSON a) => Traversal' t a
Traversal' ByteString a
_JSON
{-# INLINE _JSON #-}
instance AsJSON Value where
_JSON :: forall a. (FromJSON a, ToJSON a) => Traversal' Value a
_JSON a -> f a
f Value
v = case Value -> Result a
forall a. FromJSON a => Value -> Result a
fromJSON Value
v of
Success a
v' -> a -> Value
forall a. ToJSON a => a -> Value
toJSON (a -> Value) -> f a -> f Value
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f a
f a
v'
Result a
_ -> Value -> f Value
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Value
v
{-# INLINE _JSON #-}