{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Wire.API.UserMap where
import Control.Lens ((?~), (^.))
import Data.Aeson (FromJSON, ToJSON (toJSON))
import Data.Domain (Domain)
import Data.Id (UserId)
import Data.Map qualified as Map
import Data.OpenApi (HasDescription (description), HasExample (example), NamedSchema (..), ToSchema (..), declareSchema, toSchema)
import Data.Proxy (Proxy (..))
import Data.Set qualified as Set
import Data.Text qualified as Text
import Data.Typeable (typeRep)
import Imports
import Test.QuickCheck (Arbitrary (..))
import Wire.API.Wrapped (Wrapped)
import Wire.Arbitrary (generateExample, mapOf')
newtype UserMap a = UserMap {forall a. UserMap a -> Map UserId a
userMap :: Map UserId a}
deriving stock (UserMap a -> UserMap a -> Bool
(UserMap a -> UserMap a -> Bool)
-> (UserMap a -> UserMap a -> Bool) -> Eq (UserMap a)
forall a. Eq a => UserMap a -> UserMap a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => UserMap a -> UserMap a -> Bool
== :: UserMap a -> UserMap a -> Bool
$c/= :: forall a. Eq a => UserMap a -> UserMap a -> Bool
/= :: UserMap a -> UserMap a -> Bool
Eq, Int -> UserMap a -> ShowS
[UserMap a] -> ShowS
UserMap a -> String
(Int -> UserMap a -> ShowS)
-> (UserMap a -> String)
-> ([UserMap a] -> ShowS)
-> Show (UserMap a)
forall a. Show a => Int -> UserMap a -> ShowS
forall a. Show a => [UserMap a] -> ShowS
forall a. Show a => UserMap a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> UserMap a -> ShowS
showsPrec :: Int -> UserMap a -> ShowS
$cshow :: forall a. Show a => UserMap a -> String
show :: UserMap a -> String
$cshowList :: forall a. Show a => [UserMap a] -> ShowS
showList :: [UserMap a] -> ShowS
Show)
deriving newtype (NonEmpty (UserMap a) -> UserMap a
UserMap a -> UserMap a -> UserMap a
(UserMap a -> UserMap a -> UserMap a)
-> (NonEmpty (UserMap a) -> UserMap a)
-> (forall b. Integral b => b -> UserMap a -> UserMap a)
-> Semigroup (UserMap a)
forall b. Integral b => b -> UserMap a -> UserMap a
forall a. NonEmpty (UserMap a) -> UserMap a
forall a. UserMap a -> UserMap a -> UserMap a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall a b. Integral b => b -> UserMap a -> UserMap a
$c<> :: forall a. UserMap a -> UserMap a -> UserMap a
<> :: UserMap a -> UserMap a -> UserMap a
$csconcat :: forall a. NonEmpty (UserMap a) -> UserMap a
sconcat :: NonEmpty (UserMap a) -> UserMap a
$cstimes :: forall a b. Integral b => b -> UserMap a -> UserMap a
stimes :: forall b. Integral b => b -> UserMap a -> UserMap a
Semigroup, Semigroup (UserMap a)
UserMap a
Semigroup (UserMap a) =>
UserMap a
-> (UserMap a -> UserMap a -> UserMap a)
-> ([UserMap a] -> UserMap a)
-> Monoid (UserMap a)
[UserMap a] -> UserMap a
UserMap a -> UserMap a -> UserMap a
forall a. Semigroup (UserMap a)
forall a. UserMap a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. [UserMap a] -> UserMap a
forall a. UserMap a -> UserMap a -> UserMap a
$cmempty :: forall a. UserMap a
mempty :: UserMap a
$cmappend :: forall a. UserMap a -> UserMap a -> UserMap a
mappend :: UserMap a -> UserMap a -> UserMap a
$cmconcat :: forall a. [UserMap a] -> UserMap a
mconcat :: [UserMap a] -> UserMap a
Monoid, [UserMap a] -> Value
[UserMap a] -> Encoding
UserMap a -> Value
UserMap a -> Encoding
(UserMap a -> Value)
-> (UserMap a -> Encoding)
-> ([UserMap a] -> Value)
-> ([UserMap a] -> Encoding)
-> ToJSON (UserMap a)
forall a. ToJSON a => [UserMap a] -> Value
forall a. ToJSON a => [UserMap a] -> Encoding
forall a. ToJSON a => UserMap a -> Value
forall a. ToJSON a => UserMap a -> Encoding
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: forall a. ToJSON a => UserMap a -> Value
toJSON :: UserMap a -> Value
$ctoEncoding :: forall a. ToJSON a => UserMap a -> Encoding
toEncoding :: UserMap a -> Encoding
$ctoJSONList :: forall a. ToJSON a => [UserMap a] -> Value
toJSONList :: [UserMap a] -> Value
$ctoEncodingList :: forall a. ToJSON a => [UserMap a] -> Encoding
toEncodingList :: [UserMap a] -> Encoding
ToJSON, Value -> Parser [UserMap a]
Value -> Parser (UserMap a)
(Value -> Parser (UserMap a))
-> (Value -> Parser [UserMap a]) -> FromJSON (UserMap a)
forall a. FromJSON a => Value -> Parser [UserMap a]
forall a. FromJSON a => Value -> Parser (UserMap a)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (UserMap a)
parseJSON :: Value -> Parser (UserMap a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [UserMap a]
parseJSONList :: Value -> Parser [UserMap a]
FromJSON, (forall a b. (a -> b) -> UserMap a -> UserMap b)
-> (forall a b. a -> UserMap b -> UserMap a) -> Functor UserMap
forall a b. a -> UserMap b -> UserMap a
forall a b. (a -> b) -> UserMap a -> UserMap b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> UserMap a -> UserMap b
fmap :: forall a b. (a -> b) -> UserMap a -> UserMap b
$c<$ :: forall a b. a -> UserMap b -> UserMap a
<$ :: forall a b. a -> UserMap b -> UserMap a
Functor)
instance (Arbitrary a) => Arbitrary (UserMap a) where
arbitrary :: Gen (UserMap a)
arbitrary = Map UserId a -> UserMap a
forall a. Map UserId a -> UserMap a
UserMap (Map UserId a -> UserMap a)
-> Gen (Map UserId a) -> Gen (UserMap a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen UserId -> Gen a -> Gen (Map UserId a)
forall k v. Ord k => Gen k -> Gen v -> Gen (Map k v)
mapOf' Gen UserId
forall a. Arbitrary a => Gen a
arbitrary Gen a
forall a. Arbitrary a => Gen a
arbitrary
type WrappedQualifiedUserMap a = Wrapped "qualified_user_map" (QualifiedUserMap a)
newtype QualifiedUserMap a = QualifiedUserMap
{ forall a. QualifiedUserMap a -> Map Domain (UserMap a)
qualifiedUserMap :: Map Domain (UserMap a)
}
deriving stock (QualifiedUserMap a -> QualifiedUserMap a -> Bool
(QualifiedUserMap a -> QualifiedUserMap a -> Bool)
-> (QualifiedUserMap a -> QualifiedUserMap a -> Bool)
-> Eq (QualifiedUserMap a)
forall a. Eq a => QualifiedUserMap a -> QualifiedUserMap a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => QualifiedUserMap a -> QualifiedUserMap a -> Bool
== :: QualifiedUserMap a -> QualifiedUserMap a -> Bool
$c/= :: forall a. Eq a => QualifiedUserMap a -> QualifiedUserMap a -> Bool
/= :: QualifiedUserMap a -> QualifiedUserMap a -> Bool
Eq, Int -> QualifiedUserMap a -> ShowS
[QualifiedUserMap a] -> ShowS
QualifiedUserMap a -> String
(Int -> QualifiedUserMap a -> ShowS)
-> (QualifiedUserMap a -> String)
-> ([QualifiedUserMap a] -> ShowS)
-> Show (QualifiedUserMap a)
forall a. Show a => Int -> QualifiedUserMap a -> ShowS
forall a. Show a => [QualifiedUserMap a] -> ShowS
forall a. Show a => QualifiedUserMap a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> QualifiedUserMap a -> ShowS
showsPrec :: Int -> QualifiedUserMap a -> ShowS
$cshow :: forall a. Show a => QualifiedUserMap a -> String
show :: QualifiedUserMap a -> String
$cshowList :: forall a. Show a => [QualifiedUserMap a] -> ShowS
showList :: [QualifiedUserMap a] -> ShowS
Show)
deriving newtype (NonEmpty (QualifiedUserMap a) -> QualifiedUserMap a
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
(QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a)
-> (NonEmpty (QualifiedUserMap a) -> QualifiedUserMap a)
-> (forall b.
Integral b =>
b -> QualifiedUserMap a -> QualifiedUserMap a)
-> Semigroup (QualifiedUserMap a)
forall b.
Integral b =>
b -> QualifiedUserMap a -> QualifiedUserMap a
forall a. NonEmpty (QualifiedUserMap a) -> QualifiedUserMap a
forall a.
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall a b.
Integral b =>
b -> QualifiedUserMap a -> QualifiedUserMap a
$c<> :: forall a.
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
<> :: QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
$csconcat :: forall a. NonEmpty (QualifiedUserMap a) -> QualifiedUserMap a
sconcat :: NonEmpty (QualifiedUserMap a) -> QualifiedUserMap a
$cstimes :: forall a b.
Integral b =>
b -> QualifiedUserMap a -> QualifiedUserMap a
stimes :: forall b.
Integral b =>
b -> QualifiedUserMap a -> QualifiedUserMap a
Semigroup, Semigroup (QualifiedUserMap a)
QualifiedUserMap a
Semigroup (QualifiedUserMap a) =>
QualifiedUserMap a
-> (QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a)
-> ([QualifiedUserMap a] -> QualifiedUserMap a)
-> Monoid (QualifiedUserMap a)
[QualifiedUserMap a] -> QualifiedUserMap a
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
forall a. Semigroup (QualifiedUserMap a)
forall a. QualifiedUserMap a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. [QualifiedUserMap a] -> QualifiedUserMap a
forall a.
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
$cmempty :: forall a. QualifiedUserMap a
mempty :: QualifiedUserMap a
$cmappend :: forall a.
QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
mappend :: QualifiedUserMap a -> QualifiedUserMap a -> QualifiedUserMap a
$cmconcat :: forall a. [QualifiedUserMap a] -> QualifiedUserMap a
mconcat :: [QualifiedUserMap a] -> QualifiedUserMap a
Monoid, [QualifiedUserMap a] -> Value
[QualifiedUserMap a] -> Encoding
QualifiedUserMap a -> Value
QualifiedUserMap a -> Encoding
(QualifiedUserMap a -> Value)
-> (QualifiedUserMap a -> Encoding)
-> ([QualifiedUserMap a] -> Value)
-> ([QualifiedUserMap a] -> Encoding)
-> ToJSON (QualifiedUserMap a)
forall a. ToJSON a => [QualifiedUserMap a] -> Value
forall a. ToJSON a => [QualifiedUserMap a] -> Encoding
forall a. ToJSON a => QualifiedUserMap a -> Value
forall a. ToJSON a => QualifiedUserMap a -> Encoding
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: forall a. ToJSON a => QualifiedUserMap a -> Value
toJSON :: QualifiedUserMap a -> Value
$ctoEncoding :: forall a. ToJSON a => QualifiedUserMap a -> Encoding
toEncoding :: QualifiedUserMap a -> Encoding
$ctoJSONList :: forall a. ToJSON a => [QualifiedUserMap a] -> Value
toJSONList :: [QualifiedUserMap a] -> Value
$ctoEncodingList :: forall a. ToJSON a => [QualifiedUserMap a] -> Encoding
toEncodingList :: [QualifiedUserMap a] -> Encoding
ToJSON, Value -> Parser [QualifiedUserMap a]
Value -> Parser (QualifiedUserMap a)
(Value -> Parser (QualifiedUserMap a))
-> (Value -> Parser [QualifiedUserMap a])
-> FromJSON (QualifiedUserMap a)
forall a. FromJSON a => Value -> Parser [QualifiedUserMap a]
forall a. FromJSON a => Value -> Parser (QualifiedUserMap a)
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (QualifiedUserMap a)
parseJSON :: Value -> Parser (QualifiedUserMap a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [QualifiedUserMap a]
parseJSONList :: Value -> Parser [QualifiedUserMap a]
FromJSON)
instance Functor QualifiedUserMap where
fmap :: forall a b. (a -> b) -> QualifiedUserMap a -> QualifiedUserMap b
fmap a -> b
f (QualifiedUserMap Map Domain (UserMap a)
qMap) =
Map Domain (UserMap b) -> QualifiedUserMap b
forall a. Map Domain (UserMap a) -> QualifiedUserMap a
QualifiedUserMap (Map Domain (UserMap b) -> QualifiedUserMap b)
-> Map Domain (UserMap b) -> QualifiedUserMap b
forall a b. (a -> b) -> a -> b
$ a -> b
f (a -> b) -> Map Domain (UserMap a) -> Map Domain (UserMap b)
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Map Domain (UserMap a)
qMap
instance (Arbitrary a) => Arbitrary (QualifiedUserMap a) where
arbitrary :: Gen (QualifiedUserMap a)
arbitrary = Map Domain (UserMap a) -> QualifiedUserMap a
forall a. Map Domain (UserMap a) -> QualifiedUserMap a
QualifiedUserMap (Map Domain (UserMap a) -> QualifiedUserMap a)
-> Gen (Map Domain (UserMap a)) -> Gen (QualifiedUserMap a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Domain -> Gen (UserMap a) -> Gen (Map Domain (UserMap a))
forall k v. Ord k => Gen k -> Gen v -> Gen (Map k v)
mapOf' Gen Domain
forall a. Arbitrary a => Gen a
arbitrary Gen (UserMap a)
forall a. Arbitrary a => Gen a
arbitrary
instance (ToSchema a, ToJSON a, Arbitrary a) => ToSchema (UserMap (Set a)) where
declareNamedSchema :: Proxy (UserMap (Set a)) -> Declare (Definitions Schema) NamedSchema
declareNamedSchema Proxy (UserMap (Set a))
_ = do
Schema
mapSch <- Proxy (Map UserId (Set a)) -> Declare (Definitions Schema) Schema
forall a.
ToSchema a =>
Proxy a -> Declare (Definitions Schema) Schema
declareSchema (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Map UserId (Set a)))
let valueTypeName :: Text
valueTypeName = String -> Text
Text.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ TypeRep -> String
forall a. Show a => a -> String
show (TypeRep -> String) -> TypeRep -> String
forall a b. (a -> b) -> a -> b
$ Proxy a -> TypeRep
forall {k} (proxy :: k -> *) (a :: k).
Typeable a =>
proxy a -> TypeRep
typeRep (Proxy a -> TypeRep) -> Proxy a -> TypeRep
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a
NamedSchema -> Declare (Definitions Schema) NamedSchema
forall a. a -> DeclareT (Definitions Schema) Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NamedSchema -> Declare (Definitions Schema) NamedSchema)
-> NamedSchema -> Declare (Definitions Schema) NamedSchema
forall a b. (a -> b) -> a -> b
$
Maybe Text -> Schema -> NamedSchema
NamedSchema (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text
"UserMap_Set_" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
valueTypeName) (Schema -> NamedSchema) -> Schema -> NamedSchema
forall a b. (a -> b) -> a -> b
$
Schema
mapSch
Schema -> (Schema -> Schema) -> Schema
forall a b. a -> (a -> b) -> b
& (Maybe Text -> Identity (Maybe Text)) -> Schema -> Identity Schema
forall s a. HasDescription s a => Lens' s a
Lens' Schema (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
-> Schema -> Identity Schema)
-> Text -> Schema -> Schema
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"Map of UserId to (Set " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
valueTypeName Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
")"
Schema -> (Schema -> Schema) -> Schema
forall a b. a -> (a -> b) -> b
& (Maybe Value -> Identity (Maybe Value))
-> Schema -> Identity Schema
forall s a. HasExample s a => Lens' s a
Lens' Schema (Maybe Value)
example ((Maybe Value -> Identity (Maybe Value))
-> Schema -> Identity Schema)
-> Value -> Schema -> Schema
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Map UserId (Set a) -> Value
forall a. ToJSON a => a -> Value
toJSON (UserId -> Set a -> Map UserId (Set a)
forall k a. k -> a -> Map k a
Map.singleton (forall a. Arbitrary a => a
generateExample @UserId) (a -> Set a
forall a. a -> Set a
Set.singleton (forall a. Arbitrary a => a
generateExample @a)))
instance (Typeable a, ToSchema (UserMap a)) => ToSchema (QualifiedUserMap a) where
declareNamedSchema :: Proxy (QualifiedUserMap a)
-> Declare (Definitions Schema) NamedSchema
declareNamedSchema Proxy (QualifiedUserMap a)
_ = do
Schema
mapSch <- Proxy (Map Domain (UserMap a))
-> Declare (Definitions Schema) Schema
forall a.
ToSchema a =>
Proxy a -> Declare (Definitions Schema) Schema
declareSchema (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Map Domain (UserMap a)))
let userMapSchema :: Schema
userMapSchema = Proxy (UserMap a) -> Schema
forall a. ToSchema a => Proxy a -> Schema
toSchema (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(UserMap a))
let valueTypeName :: Text
valueTypeName = HasCallStack => Text -> Text -> Text -> Text
Text -> Text -> Text -> Text
Text.replace Text
" " Text
"_" (Text -> Text) -> (String -> Text) -> String -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
Text.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ TypeRep -> String
forall a. Show a => a -> String
show (TypeRep -> String) -> TypeRep -> String
forall a b. (a -> b) -> a -> b
$ Proxy a -> TypeRep
forall {k} (proxy :: k -> *) (a :: k).
Typeable a =>
proxy a -> TypeRep
typeRep (Proxy a -> TypeRep) -> Proxy a -> TypeRep
forall a b. (a -> b) -> a -> b
$ forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @a
NamedSchema -> Declare (Definitions Schema) NamedSchema
forall a. a -> DeclareT (Definitions Schema) Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (NamedSchema -> Declare (Definitions Schema) NamedSchema)
-> NamedSchema -> Declare (Definitions Schema) NamedSchema
forall a b. (a -> b) -> a -> b
$
Maybe Text -> Schema -> NamedSchema
NamedSchema (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text
"QualifiedUserMap_" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
valueTypeName) (Schema -> NamedSchema) -> Schema -> NamedSchema
forall a b. (a -> b) -> a -> b
$
Schema
mapSch
Schema -> (Schema -> Schema) -> Schema
forall a b. a -> (a -> b) -> b
& (Maybe Text -> Identity (Maybe Text)) -> Schema -> Identity Schema
forall s a. HasDescription s a => Lens' s a
Lens' Schema (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
-> Schema -> Identity Schema)
-> Text -> Schema -> Schema
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"Map of Domain to (UserMap (" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
valueTypeName Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"))."
Schema -> (Schema -> Schema) -> Schema
forall a b. a -> (a -> b) -> b
& (Maybe Value -> Identity (Maybe Value))
-> Schema -> Identity Schema
forall s a. HasExample s a => Lens' s a
Lens' Schema (Maybe Value)
example
((Maybe Value -> Identity (Maybe Value))
-> Schema -> Identity Schema)
-> Value -> Schema -> Schema
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Map Text (Maybe Value) -> Value
forall a. ToJSON a => a -> Value
toJSON
(Text -> Maybe Value -> Map Text (Maybe Value)
forall k a. k -> a -> Map k a
Map.singleton (Text
"domain1.example.com" :: Text) (Schema
userMapSchema Schema -> Getting (Maybe Value) Schema (Maybe Value) -> Maybe Value
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Value) Schema (Maybe Value)
forall s a. HasExample s a => Lens' s a
Lens' Schema (Maybe Value)
example))