{-# LANGUAGE GeneralizedNewtypeDeriving #-}

-- This file is part of the Wire Server implementation.
--
-- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com>
--
-- This program is free software: you can redistribute it and/or modify it under
-- the terms of the GNU Affero General Public License as published by the Free
-- Software Foundation, either version 3 of the License, or (at your option) any
-- later version.
--
-- This program is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
-- details.
--
-- You should have received a copy of the GNU Affero General Public License along
-- with this program. If not, see <https://www.gnu.org/licenses/>.

module Wire.API.Team.SearchVisibility
  ( TeamSearchVisibility (..),
    TeamSearchVisibilityView (..),
  )
where

import Control.Lens ((?~))
import Data.OpenApi qualified as S
import Data.Schema
import Deriving.Aeson
import Imports
import Wire.Arbitrary (Arbitrary, GenericUniform (..))

--------------------------------------------------------------------------------
-- TeamSearchVisibility

-- | Who can find whom inside and outside of a team?
-- Individual setting for one team, chosen by the admin.
--
-- @
-- Standard:
--   Outbound:
--     Handle: can find anyone
--     Name: same team or non team users
--   Inbound:
--     Handle: can be found by anyone
--     Name: can be found by same team only
-- NoNameOutsideTeam:
--   Outbound:
--     Handle: can find anyone
--     Name: same team only
--   Inbound:
--     Handle: can be found by anyone
--     Name: can be found by same team only
-- @
--
-- See also: 'FeatureTeamSearchVisibilityAvailability'.
data TeamSearchVisibility
  = SearchVisibilityStandard
  | SearchVisibilityNoNameOutsideTeam
  deriving stock (TeamSearchVisibility -> TeamSearchVisibility -> Bool
(TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> (TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> Eq TeamSearchVisibility
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
== :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
$c/= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
/= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
Eq, Int -> TeamSearchVisibility -> ShowS
[TeamSearchVisibility] -> ShowS
TeamSearchVisibility -> String
(Int -> TeamSearchVisibility -> ShowS)
-> (TeamSearchVisibility -> String)
-> ([TeamSearchVisibility] -> ShowS)
-> Show TeamSearchVisibility
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TeamSearchVisibility -> ShowS
showsPrec :: Int -> TeamSearchVisibility -> ShowS
$cshow :: TeamSearchVisibility -> String
show :: TeamSearchVisibility -> String
$cshowList :: [TeamSearchVisibility] -> ShowS
showList :: [TeamSearchVisibility] -> ShowS
Show, Eq TeamSearchVisibility
Eq TeamSearchVisibility =>
(TeamSearchVisibility -> TeamSearchVisibility -> Ordering)
-> (TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> (TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> (TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> (TeamSearchVisibility -> TeamSearchVisibility -> Bool)
-> (TeamSearchVisibility
    -> TeamSearchVisibility -> TeamSearchVisibility)
-> (TeamSearchVisibility
    -> TeamSearchVisibility -> TeamSearchVisibility)
-> Ord TeamSearchVisibility
TeamSearchVisibility -> TeamSearchVisibility -> Bool
TeamSearchVisibility -> TeamSearchVisibility -> Ordering
TeamSearchVisibility
-> TeamSearchVisibility -> TeamSearchVisibility
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TeamSearchVisibility -> TeamSearchVisibility -> Ordering
compare :: TeamSearchVisibility -> TeamSearchVisibility -> Ordering
$c< :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
< :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
$c<= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
<= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
$c> :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
> :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
$c>= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
>= :: TeamSearchVisibility -> TeamSearchVisibility -> Bool
$cmax :: TeamSearchVisibility
-> TeamSearchVisibility -> TeamSearchVisibility
max :: TeamSearchVisibility
-> TeamSearchVisibility -> TeamSearchVisibility
$cmin :: TeamSearchVisibility
-> TeamSearchVisibility -> TeamSearchVisibility
min :: TeamSearchVisibility
-> TeamSearchVisibility -> TeamSearchVisibility
Ord, Int -> TeamSearchVisibility
TeamSearchVisibility -> Int
TeamSearchVisibility -> [TeamSearchVisibility]
TeamSearchVisibility -> TeamSearchVisibility
TeamSearchVisibility
-> TeamSearchVisibility -> [TeamSearchVisibility]
TeamSearchVisibility
-> TeamSearchVisibility
-> TeamSearchVisibility
-> [TeamSearchVisibility]
(TeamSearchVisibility -> TeamSearchVisibility)
-> (TeamSearchVisibility -> TeamSearchVisibility)
-> (Int -> TeamSearchVisibility)
-> (TeamSearchVisibility -> Int)
-> (TeamSearchVisibility -> [TeamSearchVisibility])
-> (TeamSearchVisibility
    -> TeamSearchVisibility -> [TeamSearchVisibility])
-> (TeamSearchVisibility
    -> TeamSearchVisibility -> [TeamSearchVisibility])
-> (TeamSearchVisibility
    -> TeamSearchVisibility
    -> TeamSearchVisibility
    -> [TeamSearchVisibility])
-> Enum TeamSearchVisibility
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TeamSearchVisibility -> TeamSearchVisibility
succ :: TeamSearchVisibility -> TeamSearchVisibility
$cpred :: TeamSearchVisibility -> TeamSearchVisibility
pred :: TeamSearchVisibility -> TeamSearchVisibility
$ctoEnum :: Int -> TeamSearchVisibility
toEnum :: Int -> TeamSearchVisibility
$cfromEnum :: TeamSearchVisibility -> Int
fromEnum :: TeamSearchVisibility -> Int
$cenumFrom :: TeamSearchVisibility -> [TeamSearchVisibility]
enumFrom :: TeamSearchVisibility -> [TeamSearchVisibility]
$cenumFromThen :: TeamSearchVisibility
-> TeamSearchVisibility -> [TeamSearchVisibility]
enumFromThen :: TeamSearchVisibility
-> TeamSearchVisibility -> [TeamSearchVisibility]
$cenumFromTo :: TeamSearchVisibility
-> TeamSearchVisibility -> [TeamSearchVisibility]
enumFromTo :: TeamSearchVisibility
-> TeamSearchVisibility -> [TeamSearchVisibility]
$cenumFromThenTo :: TeamSearchVisibility
-> TeamSearchVisibility
-> TeamSearchVisibility
-> [TeamSearchVisibility]
enumFromThenTo :: TeamSearchVisibility
-> TeamSearchVisibility
-> TeamSearchVisibility
-> [TeamSearchVisibility]
Enum, TeamSearchVisibility
TeamSearchVisibility
-> TeamSearchVisibility -> Bounded TeamSearchVisibility
forall a. a -> a -> Bounded a
$cminBound :: TeamSearchVisibility
minBound :: TeamSearchVisibility
$cmaxBound :: TeamSearchVisibility
maxBound :: TeamSearchVisibility
Bounded, (forall x. TeamSearchVisibility -> Rep TeamSearchVisibility x)
-> (forall x. Rep TeamSearchVisibility x -> TeamSearchVisibility)
-> Generic TeamSearchVisibility
forall x. Rep TeamSearchVisibility x -> TeamSearchVisibility
forall x. TeamSearchVisibility -> Rep TeamSearchVisibility x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TeamSearchVisibility -> Rep TeamSearchVisibility x
from :: forall x. TeamSearchVisibility -> Rep TeamSearchVisibility x
$cto :: forall x. Rep TeamSearchVisibility x -> TeamSearchVisibility
to :: forall x. Rep TeamSearchVisibility x -> TeamSearchVisibility
Generic)
  deriving (Gen TeamSearchVisibility
Gen TeamSearchVisibility
-> (TeamSearchVisibility -> [TeamSearchVisibility])
-> Arbitrary TeamSearchVisibility
TeamSearchVisibility -> [TeamSearchVisibility]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen TeamSearchVisibility
arbitrary :: Gen TeamSearchVisibility
$cshrink :: TeamSearchVisibility -> [TeamSearchVisibility]
shrink :: TeamSearchVisibility -> [TeamSearchVisibility]
Arbitrary) via (GenericUniform TeamSearchVisibility)
  deriving ([TeamSearchVisibility] -> Value
[TeamSearchVisibility] -> Encoding
TeamSearchVisibility -> Value
TeamSearchVisibility -> Encoding
(TeamSearchVisibility -> Value)
-> (TeamSearchVisibility -> Encoding)
-> ([TeamSearchVisibility] -> Value)
-> ([TeamSearchVisibility] -> Encoding)
-> ToJSON TeamSearchVisibility
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: TeamSearchVisibility -> Value
toJSON :: TeamSearchVisibility -> Value
$ctoEncoding :: TeamSearchVisibility -> Encoding
toEncoding :: TeamSearchVisibility -> Encoding
$ctoJSONList :: [TeamSearchVisibility] -> Value
toJSONList :: [TeamSearchVisibility] -> Value
$ctoEncodingList :: [TeamSearchVisibility] -> Encoding
toEncodingList :: [TeamSearchVisibility] -> Encoding
ToJSON, Value -> Parser [TeamSearchVisibility]
Value -> Parser TeamSearchVisibility
(Value -> Parser TeamSearchVisibility)
-> (Value -> Parser [TeamSearchVisibility])
-> FromJSON TeamSearchVisibility
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser TeamSearchVisibility
parseJSON :: Value -> Parser TeamSearchVisibility
$cparseJSONList :: Value -> Parser [TeamSearchVisibility]
parseJSONList :: Value -> Parser [TeamSearchVisibility]
FromJSON, Typeable TeamSearchVisibility
Typeable TeamSearchVisibility =>
(Proxy TeamSearchVisibility
 -> Declare (Definitions Schema) NamedSchema)
-> ToSchema TeamSearchVisibility
Proxy TeamSearchVisibility
-> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy TeamSearchVisibility
-> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy TeamSearchVisibility
-> Declare (Definitions Schema) NamedSchema
S.ToSchema) via (Schema TeamSearchVisibility)

instance ToSchema TeamSearchVisibility where
  schema :: ValueSchema NamedSwaggerDoc TeamSearchVisibility
schema =
    forall v doc a b.
(With v, HasEnum v doc) =>
Text
-> SchemaP [Value] v (Alt Maybe v) a b
-> SchemaP doc Value Value a b
enum @Text
      Text
"TeamSearchVisibility"
      (SchemaP
   [Value]
   Text
   (Alt Maybe Text)
   TeamSearchVisibility
   TeamSearchVisibility
 -> ValueSchema NamedSwaggerDoc TeamSearchVisibility)
-> SchemaP
     [Value]
     Text
     (Alt Maybe Text)
     TeamSearchVisibility
     TeamSearchVisibility
-> ValueSchema NamedSwaggerDoc TeamSearchVisibility
forall a b. (a -> b) -> a -> b
$ [SchemaP
   [Value]
   Text
   (Alt Maybe Text)
   TeamSearchVisibility
   TeamSearchVisibility]
-> SchemaP
     [Value]
     Text
     (Alt Maybe Text)
     TeamSearchVisibility
     TeamSearchVisibility
forall a. Monoid a => [a] -> a
mconcat
        [ Text
-> TeamSearchVisibility
-> SchemaP
     [Value]
     Text
     (Alt Maybe Text)
     TeamSearchVisibility
     TeamSearchVisibility
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"standard" TeamSearchVisibility
SearchVisibilityStandard,
          Text
-> TeamSearchVisibility
-> SchemaP
     [Value]
     Text
     (Alt Maybe Text)
     TeamSearchVisibility
     TeamSearchVisibility
forall a b.
(ToJSON a, Eq a, Eq b) =>
a -> b -> SchemaP [Value] a (Alt Maybe a) b b
element Text
"no-name-outside-team" TeamSearchVisibility
SearchVisibilityNoNameOutsideTeam
        ]

--------------------------------------------------------------------------------
-- TeamSearchVisibilityView

newtype TeamSearchVisibilityView = TeamSearchVisibilityView TeamSearchVisibility
  deriving stock (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
(TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> Eq TeamSearchVisibilityView
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
== :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
$c/= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
/= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
Eq, Int -> TeamSearchVisibilityView -> ShowS
[TeamSearchVisibilityView] -> ShowS
TeamSearchVisibilityView -> String
(Int -> TeamSearchVisibilityView -> ShowS)
-> (TeamSearchVisibilityView -> String)
-> ([TeamSearchVisibilityView] -> ShowS)
-> Show TeamSearchVisibilityView
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TeamSearchVisibilityView -> ShowS
showsPrec :: Int -> TeamSearchVisibilityView -> ShowS
$cshow :: TeamSearchVisibilityView -> String
show :: TeamSearchVisibilityView -> String
$cshowList :: [TeamSearchVisibilityView] -> ShowS
showList :: [TeamSearchVisibilityView] -> ShowS
Show, Eq TeamSearchVisibilityView
Eq TeamSearchVisibilityView =>
(TeamSearchVisibilityView -> TeamSearchVisibilityView -> Ordering)
-> (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> (TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool)
-> (TeamSearchVisibilityView
    -> TeamSearchVisibilityView -> TeamSearchVisibilityView)
-> (TeamSearchVisibilityView
    -> TeamSearchVisibilityView -> TeamSearchVisibilityView)
-> Ord TeamSearchVisibilityView
TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
TeamSearchVisibilityView -> TeamSearchVisibilityView -> Ordering
TeamSearchVisibilityView
-> TeamSearchVisibilityView -> TeamSearchVisibilityView
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Ordering
compare :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Ordering
$c< :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
< :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
$c<= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
<= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
$c> :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
> :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
$c>= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
>= :: TeamSearchVisibilityView -> TeamSearchVisibilityView -> Bool
$cmax :: TeamSearchVisibilityView
-> TeamSearchVisibilityView -> TeamSearchVisibilityView
max :: TeamSearchVisibilityView
-> TeamSearchVisibilityView -> TeamSearchVisibilityView
$cmin :: TeamSearchVisibilityView
-> TeamSearchVisibilityView -> TeamSearchVisibilityView
min :: TeamSearchVisibilityView
-> TeamSearchVisibilityView -> TeamSearchVisibilityView
Ord, TeamSearchVisibilityView
TeamSearchVisibilityView
-> TeamSearchVisibilityView -> Bounded TeamSearchVisibilityView
forall a. a -> a -> Bounded a
$cminBound :: TeamSearchVisibilityView
minBound :: TeamSearchVisibilityView
$cmaxBound :: TeamSearchVisibilityView
maxBound :: TeamSearchVisibilityView
Bounded, (forall x.
 TeamSearchVisibilityView -> Rep TeamSearchVisibilityView x)
-> (forall x.
    Rep TeamSearchVisibilityView x -> TeamSearchVisibilityView)
-> Generic TeamSearchVisibilityView
forall x.
Rep TeamSearchVisibilityView x -> TeamSearchVisibilityView
forall x.
TeamSearchVisibilityView -> Rep TeamSearchVisibilityView x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
TeamSearchVisibilityView -> Rep TeamSearchVisibilityView x
from :: forall x.
TeamSearchVisibilityView -> Rep TeamSearchVisibilityView x
$cto :: forall x.
Rep TeamSearchVisibilityView x -> TeamSearchVisibilityView
to :: forall x.
Rep TeamSearchVisibilityView x -> TeamSearchVisibilityView
Generic)
  deriving newtype (Gen TeamSearchVisibilityView
Gen TeamSearchVisibilityView
-> (TeamSearchVisibilityView -> [TeamSearchVisibilityView])
-> Arbitrary TeamSearchVisibilityView
TeamSearchVisibilityView -> [TeamSearchVisibilityView]
forall a. Gen a -> (a -> [a]) -> Arbitrary a
$carbitrary :: Gen TeamSearchVisibilityView
arbitrary :: Gen TeamSearchVisibilityView
$cshrink :: TeamSearchVisibilityView -> [TeamSearchVisibilityView]
shrink :: TeamSearchVisibilityView -> [TeamSearchVisibilityView]
Arbitrary)
  deriving ([TeamSearchVisibilityView] -> Value
[TeamSearchVisibilityView] -> Encoding
TeamSearchVisibilityView -> Value
TeamSearchVisibilityView -> Encoding
(TeamSearchVisibilityView -> Value)
-> (TeamSearchVisibilityView -> Encoding)
-> ([TeamSearchVisibilityView] -> Value)
-> ([TeamSearchVisibilityView] -> Encoding)
-> ToJSON TeamSearchVisibilityView
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
$ctoJSON :: TeamSearchVisibilityView -> Value
toJSON :: TeamSearchVisibilityView -> Value
$ctoEncoding :: TeamSearchVisibilityView -> Encoding
toEncoding :: TeamSearchVisibilityView -> Encoding
$ctoJSONList :: [TeamSearchVisibilityView] -> Value
toJSONList :: [TeamSearchVisibilityView] -> Value
$ctoEncodingList :: [TeamSearchVisibilityView] -> Encoding
toEncodingList :: [TeamSearchVisibilityView] -> Encoding
ToJSON, Value -> Parser [TeamSearchVisibilityView]
Value -> Parser TeamSearchVisibilityView
(Value -> Parser TeamSearchVisibilityView)
-> (Value -> Parser [TeamSearchVisibilityView])
-> FromJSON TeamSearchVisibilityView
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
$cparseJSON :: Value -> Parser TeamSearchVisibilityView
parseJSON :: Value -> Parser TeamSearchVisibilityView
$cparseJSONList :: Value -> Parser [TeamSearchVisibilityView]
parseJSONList :: Value -> Parser [TeamSearchVisibilityView]
FromJSON, Typeable TeamSearchVisibilityView
Typeable TeamSearchVisibilityView =>
(Proxy TeamSearchVisibilityView
 -> Declare (Definitions Schema) NamedSchema)
-> ToSchema TeamSearchVisibilityView
Proxy TeamSearchVisibilityView
-> Declare (Definitions Schema) NamedSchema
forall a.
Typeable a =>
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
$cdeclareNamedSchema :: Proxy TeamSearchVisibilityView
-> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: Proxy TeamSearchVisibilityView
-> Declare (Definitions Schema) NamedSchema
S.ToSchema) via (Schema TeamSearchVisibilityView)

instance ToSchema TeamSearchVisibilityView where
  schema :: ValueSchema NamedSwaggerDoc TeamSearchVisibilityView
schema =
    Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> ObjectSchema SwaggerDoc TeamSearchVisibilityView
-> ValueSchema NamedSwaggerDoc TeamSearchVisibilityView
forall doc doc' a.
HasObject doc doc' =>
Text -> (doc' -> doc') -> ObjectSchema doc a -> ValueSchema doc' a
objectWithDocModifier Text
"TeamSearchVisibilityView" ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"Search visibility value for the team") (ObjectSchema SwaggerDoc TeamSearchVisibilityView
 -> ValueSchema NamedSwaggerDoc TeamSearchVisibilityView)
-> ObjectSchema SwaggerDoc TeamSearchVisibilityView
-> ValueSchema NamedSwaggerDoc TeamSearchVisibilityView
forall a b. (a -> b) -> a -> b
$
      TeamSearchVisibility -> TeamSearchVisibilityView
TeamSearchVisibilityView
        (TeamSearchVisibility -> TeamSearchVisibilityView)
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     TeamSearchVisibilityView
     TeamSearchVisibility
-> ObjectSchema SwaggerDoc TeamSearchVisibilityView
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TeamSearchVisibilityView -> TeamSearchVisibility
unwrap (TeamSearchVisibilityView -> TeamSearchVisibility)
-> SchemaP
     SwaggerDoc Object [Pair] TeamSearchVisibility TeamSearchVisibility
-> SchemaP
     SwaggerDoc
     Object
     [Pair]
     TeamSearchVisibilityView
     TeamSearchVisibility
forall (p :: * -> * -> *) a a' b.
Profunctor p =>
(a -> a') -> p a' b -> p a b
.= Text
-> (NamedSwaggerDoc -> NamedSwaggerDoc)
-> ValueSchema NamedSwaggerDoc TeamSearchVisibility
-> SchemaP
     SwaggerDoc Object [Pair] TeamSearchVisibility TeamSearchVisibility
forall doc' doc a b.
HasField doc' doc =>
Text
-> (doc' -> doc')
-> SchemaP doc' Value Value a b
-> SchemaP doc Object [Pair] a b
fieldWithDocModifier Text
"search_visibility" ((Maybe Text -> Identity (Maybe Text))
-> NamedSwaggerDoc -> Identity NamedSwaggerDoc
forall s a. HasDescription s a => Lens' s a
Lens' NamedSwaggerDoc (Maybe Text)
description ((Maybe Text -> Identity (Maybe Text))
 -> NamedSwaggerDoc -> Identity NamedSwaggerDoc)
-> Text -> NamedSwaggerDoc -> NamedSwaggerDoc
forall s t a b. ASetter s t a (Maybe b) -> b -> s -> t
?~ Text
"value of visibility") ValueSchema NamedSwaggerDoc TeamSearchVisibility
forall a. ToSchema a => ValueSchema NamedSwaggerDoc a
schema
    where
      unwrap :: TeamSearchVisibilityView -> TeamSearchVisibility
unwrap (TeamSearchVisibilityView TeamSearchVisibility
v) = TeamSearchVisibility
v