Skip to main content

Client

Struct Client 

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

A MoQ client session builder.

Implementations§

Source§

impl Client

Source

pub fn new() -> Self

A client that neither publishes nor subscribes until configured.

Source

pub fn with_publisher(self, publish: impl Consume<Consumer>) -> Self

Publish local broadcasts to the remote: the session reads from the given origin (pass an origin::Producer or origin::Consumer by reference) and forwards its announcements. Omit to publish nothing.

Source

pub fn with_subscriber(self, subscribe: Producer) -> Self

Subscribe to remote broadcasts: the session writes the broadcasts the remote announces into this origin::Producer. Omit to subscribe to nothing.

Source

pub fn with_stats(self, stats: Session) -> Self

Attach a per-connection stats::Session context. The session’s publish (egress) and subscribe (ingress) origin handles are tagged with it, so all traffic counters are attributed through the model for this session’s lifetime. Pass stats::Session::default (a no-op context) to opt out.

Source

pub fn with_origin(self, origin: Producer) -> Self

Set both publish and subscribe from one shared origin::Producer.

Equivalent to with_publisher and with_subscriber with the same origin.

Source

pub fn with_versions(self, versions: Versions) -> Self

Restrict which protocol versions to offer, in preference order. Defaults to every version this crate supports.

Source

pub fn with_path(self, path: impl Into<String>) -> Self

Set the request path to advertise in the SETUP (moq-lite-05 and every moq-transport draft we speak).

Only for transports that carry no request URI of their own (native QUIC, qmux over TCP/TLS, unix sockets), so the server learns which path the client wants. Append ? and the URI query when there is one: that is how a credential in the query (?jwt=) reaches the server. Bindings that already carry a URI (WebTransport, qmux over WebSocket) convey the path there and MUST NOT send this; a server is entitled to treat it as a protocol violation. An empty path is equivalent to omitting it. Ignored by versions with no in-band request path (lite 01-04).

Source

pub fn with_cost(self, cost: u64) -> Self

Price what subscribing from us costs, in the units the rest of the mesh uses (moq-lite-06+, and moqt-17+ via the MoQ Cluster extension).

Declared in our SETUP; the peer adds it to the route cost of every announcement we forward it, so routing prefers cheap paths over short ones. Use 0 for a direction that should look free (a sibling in the same datacenter), and something large for one that should be a last resort (metered egress). When we declare nothing the peer charges 1, which makes the cost track the hop count and so reproduces plain shortest-path routing.

This prices one direction only. What we pay to pull from the peer is whatever the peer declares, so an asymmetric link is described by each side setting its own value, and a symmetric one by both setting the same.

Source

pub fn with_peer_origin(self, origin: Origin) -> Self

Assign an origin (hop) id to the peer, used whenever the peer doesn’t declare one itself.

Some relays never declare their identity: moq-lite peers without the hops extension, and moq-transport peers that don’t negotiate the MoQ Cluster extension (or predate it, on moqt-16 and earlier). Broadcasts received from such a peer are normally attributed to the reserved origin 0 (“unknown”), which identifies nothing: it never proves continuity, so their advertisements neither splice nor survive a restart in place. This knob pins a real identity instead, exactly as if the peer had declared it:

  • broadcasts received from the peer carry origin in their hop chains, so every session dialing the same relay (with the same id) resolves to one route and loop checks can recognize it;
  • broadcasts whose hop chain already contains origin are neither announced nor served back to the peer, preventing an echo through a relay that does no loop detection of its own.

An identity the peer does declare wins over this one.

Source

pub async fn connect<S: Session>( &self, session: S, ) -> Result<(Session, Driver), Error>

Perform the MoQ handshake, returning the Session and the Driver that runs its protocol work. The driver must be polled (spawned or awaited) for the session to make progress.

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Client

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 Default for Client

Source§

fn default() -> Client

Returns the “default value” for a type. Read more

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

Source§

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

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

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> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

impl<T> MaybeSync for T
where T: Sync,

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.
Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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