autoendpoint::routers::apns::router

Struct ApnsRouter

source
pub struct ApnsRouter {
    clients: HashMap<String, ApnsClientData>,
    settings: ApnsSettings,
    endpoint_url: Url,
    metrics: Arc<StatsdClient>,
    db: Box<dyn DbClient>,
}
Expand description

Apple Push Notification Service router

Fields§

§clients: HashMap<String, ApnsClientData>

A map from release channel to APNS client

§settings: ApnsSettings§endpoint_url: Url§metrics: Arc<StatsdClient>§db: Box<dyn DbClient>

Implementations§

source§

impl ApnsRouter

source

pub async fn new( settings: ApnsSettings, endpoint_url: Url, metrics: Arc<StatsdClient>, db: Box<dyn DbClient>, ) -> Result<Self, ApnsError>

Create a new APNS router. APNS clients will be initialized for each channel listed in the settings.

source

async fn create_client( name: String, settings: ApnsChannel, ) -> Result<(String, ApnsClientData), ApnsError>

Create an APNS client for the channel

source

fn default_aps<'a>() -> DefaultNotificationBuilder<'a>

The default APS data for a notification

source

async fn handle_error( &self, error: Error, uaid: Uuid, channel: &str, ) -> ApiError

Handle an error by logging, updating metrics, etc

source

pub fn active(&self) -> bool

if we have any clients defined, this connection is “active”

source

fn derive_aps<'a>( &self, replacement: Value, holder: &'a mut ApsAlertHolder, ) -> Result<DefaultNotificationBuilder<'a>, ApnsError>

Derive an APS message from the replacement JSON block.

This requires an external “holder” that contains the data that APS will refer to. The holder should live in the same context as the aps.build() method.

Trait Implementations§

source§

impl Router for ApnsRouter

source§

fn register( &self, router_input: &RouterDataInput, app_id: &str, ) -> Result<HashMap<String, Value>, 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