Skip to main content

Connection

Struct Connection 

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

A connection to a single Kafka broker.

Implementations§

Source§

impl Connection

Source

pub async fn connect( addr: SocketAddr, options: ConnectionOptions, ) -> Result<Self, ClientError>

Connect to addr, negotiate API versions, return a usable Connection.

Source

pub async fn connect_with_options( addr: SocketAddr, options: ConnectionOptions, ) -> Result<Self, ClientError>

Connect to addr honouring options.security: a secured (TLS/SASL) dial when a policy is set, plaintext otherwise.

This is the single connect entry point for every metadata-client site (pool, admin, RLMM fetch loop) so the plaintext-vs-secured branch can’t drift between them. The plaintext (None) path is byte-identical to Self::connect.

§Errors

Propagates Self::connect / Self::connect_secured failures.

Source

pub async fn connect_secured( addr: SocketAddr, options: ConnectionOptions, security: &ClientSecurity, ) -> Result<Self, ClientError>

Connect to addr, applying security (TLS then SASL) before the API-versions bootstrap. Plaintext is identical to Self::connect.

§Errors

Returns ClientError::Connect / ClientError::Timeout on the TCP dial, or ClientError::Io if the TLS or SASL handshake fails or the security policy is internally inconsistent (e.g. a TLS protocol with no TLS config).

Source

pub async fn from_stream( stream: Box<dyn ClientDuplex>, options: ConnectionOptions, ) -> Result<Self, ClientError>

Build a Connection over a pre-established, optionally pre-authenticated stream. Negotiates API versions over the stream and returns a usable Connection.

Used by the broker’s InterBrokerClient integration: TLS + SASL handshake run before this call, so the stream is already authenticated. From here on the connection’s normal request / response framing applies.

Source

pub async fn send<R: ProtocolRequest>( &self, req: R, ) -> Result<R::Response, ClientError>

Send a typed request and await the typed response.

The version is negotiated from the broker-advertised table populated during connect. The request and response headers are encoded and decoded automatically.

§Errors

Returns ClientError::IncompatibleVersion if there is no mutually supported version, ClientError::Disconnected if the I/O loop has exited, or ClientError::Timeout if no response arrives in time.

Source

pub async fn raw_request( &self, api_key: i16, api_version: i16, body: Bytes, ) -> Result<Bytes, ClientError>

Send a hand-framed request and await the raw response body.

This bypasses the typed ProtocolRequest codegen path so callers can speak Crabka-private APIs (e.g., the controller’s Raft RPCs at api keys 1000+) whose wire types live outside crabka-protocol.

The header is always written as RequestHeader v2 (flexible) with an empty trailing tagged-fields byte. The response is assumed to use ResponseHeader v1 (flexible): the I/O loop strips the 4-byte correlation id, and this method strips the leading tagged-fields byte before returning. Callers receive the raw body bytes only.

body is the encoded request body (everything after the request header), exactly as it should appear on the wire.

§Errors

Returns ClientError::Disconnected if the I/O loop has exited or ClientError::Timeout if no response arrives within the configured request timeout.

Source

pub fn versions(&self) -> &ApiVersionTable

Negotiated API versions known to this connection.

Source

pub fn close(self)

Close the connection, cancelling all background tasks.

Trait Implementations§

Source§

impl Clone for Connection

Source§

fn clone(&self) -> Connection

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

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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