Skip to main content

Device

Struct Device 

Source
pub struct Device { /* private fields */ }
Expand description

How a push notification service names one device (§4.1.2, §8.7).

The three values a Contact URI carries so that a proxy can wake this client: which service to ask, what that service calls this device, and whatever else the service needs in between.

§Why constructing one can fail

A pn-prid is an opaque token minted by somebody else, and RFC 3261 §25.1’s pvalue does not admit every octet — =, ;, ? and @ among them. A value carrying one of those, pasted into a URI unchecked, does not produce a rejected registration; it produces a different URI, with the tail of the token read as another parameter. So the values are checked once, here, and a caller holding a token that needs octets outside pvalue percent-escapes it — escaped is part of the grammar and survives Uri round-tripping unchanged.

Implementations§

Source§

impl Device

Source

pub fn new(provider: &str, prid: &str) -> Result<Self, BuildError>

The service to ask, and the identifier it knows this device by (§4.1.2).

provider is a value from the registry §8.8 creates; prid is the token the service issued for this device.

Source

pub fn with_param(self, param: &str) -> Result<Self, BuildError>

Add the pn-param the named service needs (§4.1.2).

Optional because it is service-specific: some need nothing beyond the identifier.

Source

pub fn provider(&self) -> &str

The pn-provider value.

Source

pub fn param(&self) -> Option<&str>

The pn-param value, if the service needs one.

Source

pub fn prid(&self) -> &str

The pn-prid value.

Source

pub fn set_on(&self, uri: &mut Uri)

Put these parameters on a URI, replacing any already there (§4.1.2).

Replacing rather than appending is not tidiness: RFC 3261 §19.1.1 says “any given parameter-name MUST NOT appear more than once” in a URI, and a duplicate makes the whole URI unparseable at the far end. A stale pn-prid left beside a fresh one would take the registration down rather than merely be ignored.

Source

pub fn from_uri(uri: &Uri) -> Option<Self>

Read the push parameters off a URI (§8.7).

None unless both pn-provider and pn-prid are there: §4.1.2 has a UA insert them together, and either alone names no service that could be asked to wake anything.

Trait Implementations§

Source§

impl Clone for Device

Source§

fn clone(&self) -> Device

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Device

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Device

Source§

fn eq(&self, other: &Device) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Device

Source§

impl StructuralPartialEq for Device

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
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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.