autoendpoint::routers::webpush

Struct WebPushRouter

source
pub struct WebPushRouter {
    pub db: Box<dyn DbClient>,
    pub metrics: Arc<StatsdClient>,
    pub http: Client,
    pub endpoint_url: Url,
}
Expand description

The router for desktop user agents.

These agents are connected via an Autopush connection server. The correct server is located via the database routing table. If the server is busy or not available, the notification is stored in the database.

Fields§

§db: Box<dyn DbClient>§metrics: Arc<StatsdClient>§http: Client§endpoint_url: Url

Implementations§

source§

impl WebPushRouter

source

fn handle_error( &self, error: ApiErrorKind, vapid: Option<VapidHeaderWithKey>, ) -> ApiError

Use the same sort of error chokepoint that all the mobile clients use.

source

async fn send_notification( &self, notification: &Notification, node_id: &str, ) -> Result<Response, ApiError>

Send the notification to the node

source

async fn trigger_notification_check( &self, uaid: &Uuid, node_id: &str, ) -> Result<Response, Error>

Notify the node to check for notifications for the user

source

async fn store_notification( &self, notification: &Notification, ) -> Result<(), ApiError>

Store a notification in the database

source

async fn remove_node_id( &self, user: &User, node_id: &str, ) -> Result<(), ApiError>

Remove the node ID from a user. This is done if the user is no longer connected to the node.

source

fn make_delivered_response(&self, notification: &Notification) -> RouterResponse

Update metrics and create a response for when a notification has been directly forwarded to an autopush server.

source

fn make_stored_response(&self, notification: &Notification) -> RouterResponse

Update metrics and create a response for when a notification has been stored in the database for future transmission.

source

fn make_response( &self, notification: &Notification, destination_tag: &str, status: StatusCode, ) -> RouterResponse

Update metrics and create a response after routing a notification

Trait Implementations§

source§

impl Router for WebPushRouter

source§

fn register( &self, _router_input: &RouterDataInput, _app_id: &str, ) -> Result<HashMap<String, Value, RandomState>, RouterError>

Validate that the user can use this router, and return data to be stored in the user’s router_data field.
source§

fn route_notification<'life0, 'life1, 'async_trait>( &'life0 self, notification: &'life1 Notification, ) -> Pin<Box<dyn Future<Output = Result<RouterResponse, ApiError>> + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Route a notification to the user

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Any for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

§

fn type_name(&self) -> &'static str

§

impl<T> AnySync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T