pub trait Endpoint<Request: WebRequest> {
    type Error;

    // Required methods
    fn registrar(&self) -> Option<&dyn Registrar>;
    fn authorizer_mut(&mut self) -> Option<&mut dyn Authorizer>;
    fn issuer_mut(&mut self) -> Option<&mut dyn Issuer>;
    fn owner_solicitor(&mut self) -> Option<&mut dyn OwnerSolicitor<Request>>;
    fn scopes(&mut self) -> Option<&mut dyn Scopes<Request>>;
    fn response(
        &mut self,
        request: &mut Request,
        kind: Template<'_>
    ) -> Result<Request::Response, Self::Error>;
    fn error(&mut self, err: OAuthError) -> Self::Error;
    fn web_error(&mut self, err: Request::Error) -> Self::Error;

    // Provided method
    fn extension(&mut self) -> Option<&mut dyn Extension> { ... }
}
Expand description

Fuses requests and primitives into a coherent system to give a response.

There are multiple different valid ways to produce responses and react to internal errors for a single request type. This trait should provide those mechanisms, including trying to recover from primitive errors where appropriate.

To reduce the number of necessary impls and provide a single interface to a single trait, this trait defines accessor methods for all possibly needed primitives. Note that not all flows actually access all primitives. Thus, an implementation does not necessarily have to return something in registrar, authorizer, issuer_mut but failing to do so will also fail flows that try to use them.

Panics

It is expected that the endpoint primitive functions are consistent, i.e. they don’t begin returning None after having returned Some(registrar) previously for example. This ensures that the checks executed by the flow preparation methods catch missing primitives. When this contract is violated, the execution of a flow may lead to a panic.

Required Associated Types§

source

type Error

The error typed used as the error representation of each flow.

Required Methods§

source

fn registrar(&self) -> Option<&dyn Registrar>

A registrar if this endpoint can access one.

Returning None will implicate failing any flow that requires a registrar but does not have any effect on flows that do not require one.

source

fn authorizer_mut(&mut self) -> Option<&mut dyn Authorizer>

An authorizer if this endpoint can access one.

Returning None will implicate failing any flow that requires an authorizer but does not have any effect on flows that do not require one.

source

fn issuer_mut(&mut self) -> Option<&mut dyn Issuer>

An issuer if this endpoint can access one.

Returning None will implicate failing any flow that requires an issuer but does not have any effect on flows that do not require one.

source

fn owner_solicitor(&mut self) -> Option<&mut dyn OwnerSolicitor<Request>>

Return the system that checks owner consent.

Returning None will implicated failing the authorization code flow but does have any effect on other flows.

source

fn scopes(&mut self) -> Option<&mut dyn Scopes<Request>>

Determine the required scopes for a request.

The client must fulfill any one scope, so returning an empty slice will always deny the request.

source

fn response( &mut self, request: &mut Request, kind: Template<'_> ) -> Result<Request::Response, Self::Error>

Generate a prototype response.

The endpoint can rely on this being called at most once for each flow, if it wants to preallocate the response or return a handle on an existing prototype.

source

fn error(&mut self, err: OAuthError) -> Self::Error

Wrap an error.

source

fn web_error(&mut self, err: Request::Error) -> Self::Error

Wrap an error in the request/response types.

Provided Methods§

source

fn extension(&mut self) -> Option<&mut dyn Extension>

Get the central extension instance this endpoint.

Returning None is the default implementation and acts as simply providing any extensions.

Implementations on Foreign Types§

source§

impl<'a, R: WebRequest, E: Endpoint<R>> Endpoint<R> for &'a mut E

§

type Error = <E as Endpoint<R>>::Error

source§

fn registrar(&self) -> Option<&dyn Registrar>

source§

fn authorizer_mut(&mut self) -> Option<&mut dyn Authorizer>

source§

fn issuer_mut(&mut self) -> Option<&mut dyn Issuer>

source§

fn owner_solicitor(&mut self) -> Option<&mut dyn OwnerSolicitor<R>>

source§

fn scopes(&mut self) -> Option<&mut dyn Scopes<R>>

source§

fn response( &mut self, request: &mut R, kind: Template<'_> ) -> Result<R::Response, Self::Error>

source§

fn error(&mut self, err: OAuthError) -> Self::Error

source§

fn web_error(&mut self, err: R::Error) -> Self::Error

source§

fn extension(&mut self) -> Option<&mut dyn Extension>

source§

impl<'a, R: WebRequest, E: Endpoint<R> + 'a> Endpoint<R> for Box<E>

§

type Error = <E as Endpoint<R>>::Error

source§

fn registrar(&self) -> Option<&dyn Registrar>

source§

fn authorizer_mut(&mut self) -> Option<&mut dyn Authorizer>

source§

fn issuer_mut(&mut self) -> Option<&mut dyn Issuer>

source§

fn owner_solicitor(&mut self) -> Option<&mut dyn OwnerSolicitor<R>>

source§

fn scopes(&mut self) -> Option<&mut dyn Scopes<R>>

source§

fn response( &mut self, request: &mut R, kind: Template<'_> ) -> Result<R::Response, Self::Error>

source§

fn error(&mut self, err: OAuthError) -> Self::Error

source§

fn web_error(&mut self, err: R::Error) -> Self::Error

source§

fn extension(&mut self) -> Option<&mut dyn Extension>

Implementors§

source§

impl<E, Error, W> Endpoint<W> for ErrorInto<E, Error>where E: Endpoint<W>, E::Error: Into<Error>, W: WebRequest,

§

type Error = Error

source§

impl<Request, Inner, Ext> Endpoint<Request> for Extended<Inner, Ext>where Request: WebRequest, Inner: Endpoint<Request>, Ext: Extension,

§

type Error = <Inner as Endpoint<Request>>::Error

source§

impl<W, R, A, I, O, C, L> Endpoint<W> for Generic<R, A, I, O, C, L>where W: WebRequest, R: OptRegistrar, A: OptAuthorizer, I: OptIssuer, O: OwnerSolicitor<W>, C: Scopes<W>, L: ResponseCreator<W>,

§

type Error = Error<W>