wire-api-0.1.0
Safe HaskellSafe-Inferred
LanguageGHC2021

Wire.API.Routes.MultiVerb

Synopsis

MultiVerb types

data MultiVerb (method :: StdMethod) cs (as :: [Type]) (r :: Type) Source #

This type can be used in Servant to produce an endpoint which can return multiple values with various content types and status codes. It is similar to UVerb and behaves similarly, but it has some important differences:

  • Descriptions and statuses can be attached to individual responses without using wrapper types and without affecting the handler return type.
  • The return type of the handler can be decoupled from the types of the individual responses. One can use a Union type just like for UVerb, but MultiVerb also supports using an arbitrary type with an AsUnion instance.
  • Headers can be attached to individual responses, also without affecting the handler return type.

Instances

Instances details
RoutesToPaths (MultiVerb method cs as r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

HasLink (MultiVerb method cs as r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type MkLink (MultiVerb method cs as r) a Source #

Methods

toLink :: (Link -> a) -> Proxy (MultiVerb method cs as r) -> Link -> MkLink (MultiVerb method cs as r) a Source #

(IsResponseList cs as, AllMime cs, ReflectMethod method, AsUnion as r, RunClient m) => HasClient m (MultiVerb method cs as r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type Client m (MultiVerb method cs as r) Source #

Methods

clientWithRoute :: Proxy m -> Proxy (MultiVerb method cs as r) -> Request -> Client m (MultiVerb method cs as r) Source #

hoistClientMonad :: Proxy m -> Proxy (MultiVerb method cs as r) -> (forall x. mon x -> mon' x) -> Client mon (MultiVerb method cs as r) -> Client mon' (MultiVerb method cs as r) Source #

(OpenApiMethod method, IsSwaggerResponseList as) => HasOpenApi (MultiVerb method '() as r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toOpenApi :: Proxy (MultiVerb method '() as r) -> OpenApi Source #

(OpenApiMethod method, IsSwaggerResponseList as, AllMime cs) => HasOpenApi (MultiVerb method cs as r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toOpenApi :: Proxy (MultiVerb method cs as r) -> OpenApi Source #

(Monad m, AllMime cs, HasClient m (MultiVerb method cs as r)) => HasClientAlgebra m (MultiVerb method cs as r) Source # 
Instance details

Defined in Wire.API.Routes.ClientAlgebra

Methods

joinClient :: m (Client m (MultiVerb method cs as r)) -> Client m (MultiVerb method cs as r) Source #

bindClient :: m a -> (a -> Client m (MultiVerb method cs as r)) -> Client m (MultiVerb method cs as r) Source #

(HasAcceptCheck cs, IsResponseList cs as, AsUnion as r, ReflectMethod method) => HasServer (MultiVerb method cs as r :: Type) ctx Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ServerT (MultiVerb method cs as r) m Source #

Methods

route :: Proxy (MultiVerb method cs as r) -> Context ctx -> Delayed env (Server (MultiVerb method cs as r)) -> Router env Source #

hoistServerWithContext :: Proxy (MultiVerb method cs as r) -> Proxy ctx -> (forall x. m x -> n x) -> ServerT (MultiVerb method cs as r) m -> ServerT (MultiVerb method cs as r) n Source #

type SpecialiseToVersion (v :: k1) (MultiVerb m t r x) Source # 
Instance details

Defined in Wire.API.Routes.SpecialiseToVersion

type SpecialiseToVersion (v :: k1) (MultiVerb m t r x) = MultiVerb m t r x
type Client m (MultiVerb method cs as r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type Client m (MultiVerb method cs as r) = m r
type SpecialiseToVersion v (MultiVerb m t r x) Source # 
Instance details

Defined in Wire.API.Routes.Version

type SpecialiseToVersion v (MultiVerb m t r x) = MultiVerb m t r x
type MkLink (MultiVerb method cs as r :: Type) a Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type MkLink (MultiVerb method cs as r :: Type) a = a
type ServerT (MultiVerb method cs as r :: Type) m Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ServerT (MultiVerb method cs as r :: Type) m = m r

type MultiVerb1 m cs a = MultiVerb m cs '[a] (ResponseType a) Source #

A MultiVerb endpoint with a single response.

data Respond (s :: Nat) (desc :: Symbol) (a :: Type) Source #

A type to describe a MultiVerb response.

Includes status code, description, and return type. The content type of the response is determined dynamically using the accept header and the list of supported content types specified in the containing MultiVerb type.

Instances

Instances details
AsUnion GetActivateResponse ActivationRespWithStatus Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

AsUnion UpgradePersonalToTeamResponses (Either UpgradePersonalToTeamError CreateUserTeam) Source # 
Instance details

Defined in Wire.API.User

(KnownSymbol desc, ToSchema a) => IsSwaggerResponse (Respond s desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

(AllMimeRender cs a, AllMimeUnrender cs a, KnownStatus s) => IsResponse (cs :: [Type]) (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (Respond s desc a) :: Nat Source #

type ResponseBody (Respond s desc a) Source #

AsUnion (MessageNotSentResponses a) (MessageNotSent a) Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.Messaging

AsUnion '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()] DeleteUserResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: DeleteUserResponse -> Union (ResponseTypes '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()]) -> DeleteUserResponse Source #

AsUnion '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()] ChangeEmailResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: ChangeEmailResponse -> Union (ResponseTypes '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()]) -> ChangeEmailResponse Source #

AsUnion '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()] CheckBlacklistResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: CheckBlacklistResponse -> Union (ResponseTypes '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()]) -> CheckBlacklistResponse Source #

AsUnion '[Respond 404 "Notification list" QueuedNotificationList, Respond 200 "Notification list" QueuedNotificationList] GetNotificationsResponse Source # 
Instance details

Defined in Wire.API.Notification

AsConstructor '[a] (Respond code desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toConstructor :: ResponseType (Respond code desc a) -> NP I '[a] Source #

fromConstructor :: NP I '[a] -> ResponseType (Respond code desc a) Source #

type ResponseBody (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseBody (Respond s desc a) = LByteString
type ResponseStatus (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (Respond s desc a) = s
type ResponseType (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (Respond s desc a) = a

data RespondAs ct (s :: Nat) (desc :: Symbol) (a :: Type) Source #

A type to describe a MultiVerb response with a fixed content type.

Similar to Respond, but hardcodes the content type to be used for generating the response.

Instances

Instances details
AsUnion GetActivateResponse ActivationRespWithStatus Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

AsUnion CreateOAuthAuthorizationCodeResponses CreateOAuthCodeResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig.OAuth

AsUnion DisableLegalHoldForUserResponseType DisableLegalHoldForUserResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion GrantConsentResultResponseTypes GrantConsentResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion RequestDeviceResultResponseType RequestDeviceResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion TeamMemberDeleteResultResponseType TeamMemberDeleteResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.TeamMember

AsUnion HeadInvitationsResponses HeadInvitationByEmailResult Source # 
Instance details

Defined in Wire.API.Team.Invitation

KnownStatus s => IsResponse (cs :: k) (RespondAs '() s desc ()) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondAs '() s desc ()) :: Nat Source #

type ResponseBody (RespondAs '() s desc ()) Source #

Methods

responseRender :: AcceptHeader -> ResponseType (RespondAs '() s desc ()) -> Maybe (ResponseF (ResponseBody (RespondAs '() s desc ()))) Source #

responseUnrender :: MediaType -> ResponseF (ResponseBody (RespondAs '() s desc ())) -> UnrenderResult (ResponseType (RespondAs '() s desc ())) Source #

(KnownStatus s, MimeRender ct a, MimeUnrender ct a) => IsResponse (cs :: k) (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondAs ct s desc a) :: Nat Source #

type ResponseBody (RespondAs ct s desc a) Source #

Methods

responseRender :: AcceptHeader -> ResponseType (RespondAs ct s desc a) -> Maybe (ResponseF (ResponseBody (RespondAs ct s desc a))) Source #

responseUnrender :: MediaType -> ResponseF (ResponseBody (RespondAs ct s desc a)) -> UnrenderResult (ResponseType (RespondAs ct s desc a)) Source #

AsUnion DeleteSelfResponses (Maybe Timeout) Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

KnownSymbol desc => IsSwaggerResponse (RespondEmpty s desc :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

(KnownSymbol desc, ToSchema a, Accept ct) => IsSwaggerResponse (RespondAs ct s desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

AsConstructor ('[] :: [Type]) (RespondEmpty code desc) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

AsUnion '[RespondEmpty s1 desc1, RespondEmpty s2 desc2] Bool Source #

A handler for a pair of empty responses can be implemented simply by returning a boolean value. The convention is that the "failure" case, normally represented by False, corresponds to the first response.

Instance details

Defined in Wire.API.Routes.MultiVerb

AsUnion '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"] CheckHandleResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: CheckHandleResponse -> Union (ResponseTypes '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"]) -> CheckHandleResponse Source #

AsUnion '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"] UpdateSSOIdResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: UpdateSSOIdResponse -> Union (ResponseTypes '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"]) -> UpdateSSOIdResponse Source #

AsUnion '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"] UpdateServiceWhitelistResp Source # 
Instance details

Defined in Wire.API.Provider.Service

Methods

toUnion :: UpdateServiceWhitelistResp -> Union (ResponseTypes '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"]) -> UpdateServiceWhitelistResp Source #

AsConstructor '[a] (RespondAs ct code desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toConstructor :: ResponseType (RespondAs ct code desc a) -> NP I '[a] Source #

fromConstructor :: NP I '[a] -> ResponseType (RespondAs ct code desc a) Source #

type ResponseBody (RespondAs '() s desc ()) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseBody (RespondAs '() s desc ()) = ()
type ResponseBody (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseBody (RespondAs ct s desc a) = LByteString
type ResponseStatus (RespondAs '() s desc ()) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (RespondAs '() s desc ()) = s
type ResponseStatus (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (RespondAs ct s desc a) = s
type ResponseType (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (RespondAs ct s desc a) = a

type RespondEmpty s desc = RespondAs '() s desc () Source #

A type to describe a MultiVerb response with an empty body.

Includes status code and description.

data RespondStreaming (s :: Nat) (desc :: Symbol) (ct :: Type) Source #

A type to describe a streaming MultiVerb response.

Includes status code, description and content type. Note that the handler return type is hardcoded to be 'SourceIO ByteString'.

Instances

Instances details
(Accept ct, KnownStatus s) => IsResponse (cs :: k) (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondStreaming s desc ct) :: Nat Source #

type ResponseBody (RespondStreaming s desc ct) Source #

KnownSymbol desc => IsSwaggerResponse (RespondStreaming s desc ct :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

type ResponseBody (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (RespondStreaming s desc ct) = s
type ResponseType (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

data WithHeaders (hs :: [Type]) (a :: Type) (r :: Type) Source #

This type adds response headers to a MultiVerb response.

Type variables: * hs: type-level list of headers * a: return type (with headers) * r: underlying response (without headers)

Instances

Instances details
AsUnion CreateOAuthAuthorizationCodeResponses CreateOAuthCodeResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig.OAuth

(AsHeaders xs (ResponseType r) a, ServantHeaders hs xs, IsResponse cs r) => IsResponse (cs :: k) (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (WithHeaders hs a r) :: Nat Source #

type ResponseBody (WithHeaders hs a r) Source #

(AllToResponseHeader hs, IsSwaggerResponse r) => IsSwaggerResponse (WithHeaders hs a r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

type ResponseBody (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseStatus (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (WithHeaders hs a r) = a

data DescHeader (name :: Symbol) (desc :: Symbol) (a :: Type) Source #

Instances

Instances details
(KnownSymbol name, KnownSymbol desc, ToParamSchema a) => ToResponseHeader (DescHeader name desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toResponseHeader :: Proxy (DescHeader name desc a) -> (HeaderName, Header) Source #

data OptHeader h Source #

A wrapper to turn a response header into an optional one.

Instances

Instances details
ToResponseHeader h => ToResponseHeader (OptHeader h :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

class AsHeaders xs a b where Source #

This is used to convert a response containing headers to a custom type including the information in the headers.

Methods

fromHeaders :: (NP I xs, a) -> b Source #

toHeaders :: b -> (NP I xs, a) Source #

Instances

Instances details
AsHeaders '[SetCookie, UserId] SelfProfile RegisterSuccess Source # 
Instance details

Defined in Wire.API.User

AsHeaders '[ClientId] Client Client Source # 
Instance details

Defined in Wire.API.User.Client

AsHeaders '[ConvId] Conversation Conversation Source # 
Instance details

Defined in Wire.API.Conversation

AsHeaders '[ConvId] CreateGroupConversation CreateGroupConversation Source # 
Instance details

Defined in Wire.API.Conversation

AsHeaders '[UserId] SelfProfile SelfProfile Source # 
Instance details

Defined in Wire.API.User

AsHeaders '[Token] PushToken AddTokenSuccess Source # 
Instance details

Defined in Wire.API.Push.V2.Token

AsHeaders '[Maybe UserTokenCookie] AccessToken SomeAccess Source # 
Instance details

Defined in Wire.API.User.Auth

AsHeaders '[a] () a Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

fromHeaders :: (NP I '[a], ()) -> a Source #

toHeaders :: a -> (NP I '[a], ()) Source #

AsHeaders '[NonceHeader, CacheControl] () (Nonce, CacheControl) Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

AsHeaders '[h] a (a, h) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

fromHeaders :: (NP I '[h], a) -> (a, h) Source #

toHeaders :: (a, h) -> (NP I '[h], a) Source #

class AsUnion (as :: [Type]) (r :: Type) where Source #

This class is used to convert a handler return type to a union type including all possible responses of a MultiVerb endpoint.

Any glue code necessary to convert application types to and from the canonical Union type corresponding to a MultiVerb endpoint should be packaged into an AsUnion instance.

Instances

Instances details
AsUnion GetActivateResponse ActivationRespWithStatus Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

AsUnion CreateOAuthAuthorizationCodeResponses CreateOAuthCodeResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig.OAuth

AsUnion DisableLegalHoldForUserResponseType DisableLegalHoldForUserResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion GrantConsentResultResponseTypes GrantConsentResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion RequestDeviceResultResponseType RequestDeviceResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.LegalHold

AsUnion TeamMemberDeleteResultResponseType TeamMemberDeleteResult Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.TeamMember

AsUnion HeadInvitationsResponses HeadInvitationByEmailResult Source # 
Instance details

Defined in Wire.API.Team.Invitation

res ~ CreateUserSparErrorResponses => AsUnion res CreateUserSparError Source # 
Instance details

Defined in Wire.API.User

AsUnion DeleteSelfResponses (Maybe Timeout) Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

rs ~ ResponseTypes as => AsUnion as (Union rs) Source #

Unions can be used directly as handler return types using this trivial instance.

Instance details

Defined in Wire.API.Routes.MultiVerb

res ~ ChangeHandleResponses => AsUnion res (Maybe ChangeHandleError) Source # 
Instance details

Defined in Wire.API.User

res ~ ChangePasswordResponses => AsUnion res (Maybe ChangePasswordError) Source # 
Instance details

Defined in Wire.API.User

res ~ ChangePhoneResponses => AsUnion res (Maybe ChangePhoneError) Source # 
Instance details

Defined in Wire.API.User

res ~ RemoveIdentityResponses => AsUnion res (Maybe RemoveIdentityError) Source # 
Instance details

Defined in Wire.API.User

res ~ PutSelfResponses => AsUnion res (Maybe UpdateProfileError) Source # 
Instance details

Defined in Wire.API.User

(rs ~ (MessageNotSentResponses a .++ '[r]), a ~ ResponseType r) => AsUnion rs (PostOtrResponse a) Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.Messaging

AsUnion UpgradePersonalToTeamResponses (Either UpgradePersonalToTeamError CreateUserTeam) Source # 
Instance details

Defined in Wire.API.User

res ~ AddTokenResponses => AsUnion res (Either AddTokenError AddTokenSuccess) Source # 
Instance details

Defined in Wire.API.Push.V2.Token

res ~ CreateUserSparResponses => AsUnion res (Either CreateUserSparError RegisterSuccess) Source # 
Instance details

Defined in Wire.API.User

res ~ CreateUserSparInternalResponses => AsUnion res (Either CreateUserSparError SelfProfile) Source # 
Instance details

Defined in Wire.API.User

res ~ RegisterResponses => AsUnion res (Either RegisterError RegisterSuccess) Source # 
Instance details

Defined in Wire.API.User

res ~ RegisterInternalResponses => AsUnion res (Either RegisterError SelfProfile) Source # 
Instance details

Defined in Wire.API.User

(Code a ~ xss, Generic a, AsConstructors xss rs) => AsUnion rs (GenericAsUnion rs a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

AsUnion (MessageNotSentResponses a) (MessageNotSent a) Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.Messaging

AsUnion '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()] DeleteUserResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: DeleteUserResponse -> Union (ResponseTypes '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 200 "UserResponseAccountAlreadyDeleted" (), Respond 202 "UserResponseAccountDeleted" ()]) -> DeleteUserResponse Source #

AsUnion '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()] ChangeEmailResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: ChangeEmailResponse -> Union (ResponseTypes '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 202 "Update accepted and pending activation of the new email" (), Respond 204 "No update, current and new email address are the same" ()]) -> ChangeEmailResponse Source #

AsUnion '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()] CheckBlacklistResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: CheckBlacklistResponse -> Union (ResponseTypes '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()]) Source #

fromUnion :: Union (ResponseTypes '[Respond 404 "Not blacklisted" (), Respond 200 "Yes blacklisted" ()]) -> CheckBlacklistResponse Source #

AsUnion '[Respond 404 "Notification list" QueuedNotificationList, Respond 200 "Notification list" QueuedNotificationList] GetNotificationsResponse Source # 
Instance details

Defined in Wire.API.Notification

AsUnion '[RespondEmpty s1 desc1, RespondEmpty s2 desc2] Bool Source #

A handler for a pair of empty responses can be implemented simply by returning a boolean value. The convention is that the "failure" case, normally represented by False, corresponds to the first response.

Instance details

Defined in Wire.API.Routes.MultiVerb

AsUnion '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"] CheckHandleResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: CheckHandleResponse -> Union (ResponseTypes '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "CheckHandleResponseFound", RespondEmpty 404 "CheckHandleResponseNotFound"]) -> CheckHandleResponse Source #

AsUnion '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"] UpdateSSOIdResponse Source # 
Instance details

Defined in Wire.API.User

Methods

toUnion :: UpdateSSOIdResponse -> Union (ResponseTypes '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "UpdateSSOIdSuccess", RespondEmpty 404 "UpdateSSOIdNotFound"]) -> UpdateSSOIdResponse Source #

AsUnion '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"] UpdateServiceWhitelistResp Source # 
Instance details

Defined in Wire.API.Provider.Service

Methods

toUnion :: UpdateServiceWhitelistResp -> Union (ResponseTypes '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"]) Source #

fromUnion :: Union (ResponseTypes '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"]) -> UpdateServiceWhitelistResp Source #

ResponseType r ~ a => AsUnion '[r] a Source #

A handler with a single response.

Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toUnion :: a -> Union (ResponseTypes '[r]) Source #

fromUnion :: Union (ResponseTypes '[r]) -> a Source #

(ResponseType r1 ~ ConversationCodeInfo, ResponseType r2 ~ Event) => AsUnion '[r1, r2] AddCodeResult Source # 
Instance details

Defined in Wire.API.Event.Conversation

(ResponseType r1 ~ Conversation, ResponseType r2 ~ CreateGroupConversation) => AsUnion '[r1, r2] CreateGroupConversationResponse Source # 
Instance details

Defined in Wire.API.Routes.Public.Galley.Conversation

(ResponseType r ~ a, KnownError (MapError e)) => AsUnion '[ErrorResponse e, r] (Maybe a) Source # 
Instance details

Defined in Wire.API.Error

(ResponseType r1 ~ AssetLocation Absolute, ResponseType r2 ~ SourceIO ByteString, KnownError (MapError e)) => AsUnion '[ErrorResponse e, r1, r2] (Maybe LocalOrRemoteAsset) Source # 
Instance details

Defined in Wire.API.Asset

(ResponseType r1 ~ a, ResponseType r2 ~ a) => AsUnion '[r1, r2] (ResponseForExistedCreated a) Source # 
Instance details

Defined in Wire.API.Routes.Public.Util

(ResponseType r1 ~ (), ResponseType r2 ~ a) => AsUnion '[r1, r2] (UpdateResult a) Source # 
Instance details

Defined in Wire.API.Routes.Public.Util

(ResponseType r1 ~ (), ResponseType r2 ~ a) => AsUnion '[r1, r2] (Maybe a) Source #

A handler for a pair of responses where the first is empty can be implemented simply by returning a Maybe value. The convention is that the "failure" case, normally represented by Nothing, corresponds to the first response.

Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toUnion :: Maybe a -> Union (ResponseTypes '[r1, r2]) Source #

fromUnion :: Union (ResponseTypes '[r1, r2]) -> Maybe a Source #

eitherToUnion :: forall as bs a b. (InjectAfter as bs, InjectBefore as bs) => (a -> Union as) -> (b -> Union bs) -> Either a b -> Union (as .++ bs) Source #

eitherFromUnion :: EitherFromUnion as bs => (Union as -> a) -> (Union bs -> b) -> Union (as .++ bs) -> Either a b Source #

maybeToUnion :: forall as a. (InjectAfter as '[()], InjectBefore as '[()]) => (a -> Union as) -> Maybe a -> Union (as .++ '[()]) Source #

maybeFromUnion :: forall as a. EitherFromUnion as '[()] => (Union as -> a) -> Union (as .++ '[()]) -> Maybe a Source #

class AsConstructor xs r where Source #

This class can be instantiated to get automatic derivation of AsUnion instances via GenericAsUnion. The idea is that one has to make sure that for each response r in a MultiVerb endpoint, there is an instance of AsConstructor xs r for some xs, and that the list xss of all the corresponding xs is equal to Code of the handler type. Then one can write: @ type Responses = ... data Result = ... deriving stock (Generic) deriving (AsUnion Responses) via (GenericAsUnion Responses Result)

instance GSOP.Generic Result @ and get an AsUnion instance for free.

There are a few predefined instances for constructors taking a single type corresponding to a simple response, and for empty responses, but in more general cases one either has to define an AsConstructor instance by hand, or derive it via GenericAsConstructor.

Instances

Instances details
(Code (ResponseType r) ~ '[xs], Generic (ResponseType r)) => AsConstructor xs (GenericAsConstructor r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

KnownError (MapError e) => AsConstructor ('[] :: [Type]) (ErrorResponse e) Source # 
Instance details

Defined in Wire.API.Error

AsConstructor ('[] :: [Type]) (RespondEmpty code desc) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

AsConstructor '[a] (Respond code desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toConstructor :: ResponseType (Respond code desc a) -> NP I '[a] Source #

fromConstructor :: NP I '[a] -> ResponseType (Respond code desc a) Source #

AsConstructor '[a] (RespondAs ct code desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

toConstructor :: ResponseType (RespondAs ct code desc a) -> NP I '[a] Source #

fromConstructor :: NP I '[a] -> ResponseType (RespondAs ct code desc a) Source #

newtype GenericAsUnion rs a Source #

This type is meant to be used with deriving via in order to automatically generate an AsUnion instance using SOP.

See AsConstructor for more information and examples.

Constructors

GenericAsUnion a 

Instances

Instances details
(Code a ~ xss, Generic a, AsConstructors xss rs) => AsUnion rs (GenericAsUnion rs a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type family ResponseType a :: Type Source #

Instances

Instances details
type ResponseType RespondWithDeletionCodeTimeout Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

type ResponseType (GenericAsConstructor r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (ErrorResponse e) Source # 
Instance details

Defined in Wire.API.Error

type ResponseType (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (Respond s desc a) = a
type ResponseType (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (WithHeaders hs a r) = a
type ResponseType (EmptyErrorForLegacyReasons s desc) Source # 
Instance details

Defined in Wire.API.Error.Empty

type ResponseType (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

type ResponseType (RespondAs ct s desc a) = a
type ResponseType (VersionedRespond v s desc a) Source # 
Instance details

Defined in Wire.API.Routes.Versioned

type ResponseType (VersionedRespond v s desc a) = a

class IsWaiBody (ResponseBody a) => IsResponse cs a where Source #

Associated Types

type ResponseStatus a :: Nat Source #

type ResponseBody a :: Type Source #

Instances

Instances details
(ResponseBody (RespondWithStaticError (MapError e)) ~ LByteString, ResponseType (RespondWithStaticError (MapError e)) ~ DynError, IsResponse cs (RespondWithStaticError (MapError e))) => IsResponse (cs :: k2) (ErrorResponse e) Source # 
Instance details

Defined in Wire.API.Error

(Accept ct, KnownStatus s) => IsResponse (cs :: k) (RespondStreaming s desc ct) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondStreaming s desc ct) :: Nat Source #

type ResponseBody (RespondStreaming s desc ct) Source #

(AsHeaders xs (ResponseType r) a, ServantHeaders hs xs, IsResponse cs r) => IsResponse (cs :: k) (WithHeaders hs a r) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (WithHeaders hs a r) :: Nat Source #

type ResponseBody (WithHeaders hs a r) Source #

KnownStatus s => IsResponse (cs :: k1) (EmptyErrorForLegacyReasons s desc) Source # 
Instance details

Defined in Wire.API.Error.Empty

KnownStatus s => IsResponse (cs :: k) (RespondAs '() s desc ()) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondAs '() s desc ()) :: Nat Source #

type ResponseBody (RespondAs '() s desc ()) Source #

Methods

responseRender :: AcceptHeader -> ResponseType (RespondAs '() s desc ()) -> Maybe (ResponseF (ResponseBody (RespondAs '() s desc ()))) Source #

responseUnrender :: MediaType -> ResponseF (ResponseBody (RespondAs '() s desc ())) -> UnrenderResult (ResponseType (RespondAs '() s desc ())) Source #

(KnownStatus s, MimeRender ct a, MimeUnrender ct a) => IsResponse (cs :: k) (RespondAs ct s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (RespondAs ct s desc a) :: Nat Source #

type ResponseBody (RespondAs ct s desc a) Source #

Methods

responseRender :: AcceptHeader -> ResponseType (RespondAs ct s desc a) -> Maybe (ResponseF (ResponseBody (RespondAs ct s desc a))) Source #

responseUnrender :: MediaType -> ResponseF (ResponseBody (RespondAs ct s desc a)) -> UnrenderResult (ResponseType (RespondAs ct s desc a)) Source #

IsResponse cs (Respond s desc (Versioned v a)) => IsResponse (cs :: k) (VersionedRespond v s desc a) Source # 
Instance details

Defined in Wire.API.Routes.Versioned

Associated Types

type ResponseStatus (VersionedRespond v s desc a) :: Nat Source #

type ResponseBody (VersionedRespond v s desc a) Source #

(AllMimeRender cs a, AllMimeUnrender cs a, KnownStatus s) => IsResponse (cs :: [Type]) (Respond s desc a) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Associated Types

type ResponseStatus (Respond s desc a) :: Nat Source #

type ResponseBody (Respond s desc a) Source #

IsResponse '[JSON] RespondWithDeletionCodeTimeout Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

class IsSwaggerResponse a where Source #

Methods

responseSwagger :: Declare Response Source #

Instances

Instances details
IsSwaggerResponse RespondWithDeletionCodeTimeout Source # 
Instance details

Defined in Wire.API.Routes.Public.Brig

Methods

responseSwagger :: Declare Response Source #

(KnownError (MapError e), Typeable (MapError e)) => IsSwaggerResponse (ErrorResponse e :: Type) Source # 
Instance details

Defined in Wire.API.Error

Methods

responseSwagger :: Declare Response Source #

KnownSymbol desc => IsSwaggerResponse (RespondEmpty s desc :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

(KnownSymbol desc, ToSchema a) => IsSwaggerResponse (Respond s desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

KnownSymbol desc => IsSwaggerResponse (RespondStreaming s desc ct :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

(AllToResponseHeader hs, IsSwaggerResponse r) => IsSwaggerResponse (WithHeaders hs a r :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

KnownSymbol desc => IsSwaggerResponse (EmptyErrorForLegacyReasons s desc :: Type) Source # 
Instance details

Defined in Wire.API.Error.Empty

Methods

responseSwagger :: Declare Response Source #

(KnownSymbol desc, ToSchema a, Accept ct) => IsSwaggerResponse (RespondAs ct s desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseSwagger :: Declare Response Source #

(KnownSymbol desc, ToSchema a, SingI v, ToSchema (Versioned v a), Typeable v) => IsSwaggerResponse (VersionedRespond v s desc a :: Type) Source # 
Instance details

Defined in Wire.API.Routes.Versioned

Methods

responseSwagger :: Declare Response Source #

simpleResponseSwagger :: forall a cs desc. (ToSchema a, KnownSymbol desc, AllMime cs) => Declare Response Source #

type family ResponseTypes (as :: [Type]) where ... Source #

Equations

ResponseTypes '[] = '[] 
ResponseTypes (a ': as) = ResponseType a ': ResponseTypes as 

class IsResponseList cs as where Source #

Instances

Instances details
IsResponseList (cs :: k) ('[] :: [Type]) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseListRender :: AcceptHeader -> Union (ResponseTypes '[]) -> Maybe SomeResponse Source #

responseListUnrender :: MediaType -> SomeResponse -> UnrenderResult (Union (ResponseTypes '[])) Source #

responseListStatuses :: [Status] Source #

(IsResponse cs a, IsResponseList cs as, KnownStatus (ResponseStatus a)) => IsResponseList (cs :: k) (a ': as) Source # 
Instance details

Defined in Wire.API.Routes.MultiVerb

Methods

responseListRender :: AcceptHeader -> Union (ResponseTypes (a ': as)) -> Maybe SomeResponse Source #

responseListUnrender :: MediaType -> SomeResponse -> UnrenderResult (Union (ResponseTypes (a ': as))) Source #

responseListStatuses :: [Status] Source #

addContentType :: forall ct a. Accept ct => ResponseF a -> ResponseF a Source #