Skip to main content

SeppClient

Struct SeppClient 

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

A handle to a Sepp server.

Cloning is cheap — clones share the same underlying connection and retry policy — so clone freely to use the client across tasks. Every RPC method takes &self.

Implementations§

Source§

impl SeppClient

Source

pub async fn connect(addr: impl Into<String>) -> Result<Self, ClientError>

Connects to a Sepp server over plaintext with no authentication.

addr is a URI such as http://127.0.0.1:50051. For API-key auth, TLS, or a custom RetryPolicy, use builder instead.

Source

pub fn builder(addr: impl Into<String>) -> SeppClientBuilder

Starts building a client for addr, allowing authentication, TLS, and retry configuration before connect.

Source

pub fn from_channel(channel: Channel) -> Self

Wraps an already-established tonic Channel, with no authentication and the default RetryPolicy.

Use this to share a channel or apply custom tonic transport configuration the builder does not expose.

Source

pub async fn enqueue_batch( &self, jobs: impl IntoIterator<Item = EnqueueRequest>, ) -> Result<Vec<Result<EnqueueAck, JobRejection>>, ClientError>

Enqueues a batch of jobs on a best-effort basis.

Each job is accepted or rejected independently: the returned vector has one entry per submitted job, in the same order, where the inner Result is Ok for an accepted job or Err for a per-job JobRejection. The outer Err is reserved for whole-call failures (empty batch, transport error, protocol violation). Transient failures are retried per the client’s RetryPolicy; note that retried enqueues can duplicate jobs that carry no idempotency key, so when any job in the batch lacks one, the ambiguous-commit codes DeadlineExceeded and Aborted are not retried (see RetryPolicy).

For all-or-nothing semantics, use enqueue_atomic.

Source

pub async fn enqueue( &self, job: EnqueueRequest, ) -> Result<EnqueueAck, EnqueueError>

Enqueues a single job.

A convenience wrapper over enqueue_batch that flattens the result: a per-job rejection becomes EnqueueError::Rejected. Its retry behavior — including that a retried enqueue can duplicate a job that carries no idempotency key — is inherited from enqueue_batch.

Source

pub async fn enqueue_atomic( &self, jobs: impl IntoIterator<Item = EnqueueRequest>, ) -> Result<Vec<EnqueueAck>, AtomicEnqueueError>

Enqueues a batch of jobs atomically: either all are accepted or none are.

On success, returns one EnqueueAck per job, in order. If any job fails validation, nothing is enqueued and every failure is returned together as AtomicEnqueueError::Validation. Use this when the jobs are coordinated steps and a partial enqueue would leave the system inconsistent.

Transient failures are retried per the client’s RetryPolicy; note that retried enqueues can duplicate jobs that carry no idempotency key, so when any job in the batch lacks one, the ambiguous-commit codes DeadlineExceeded and Aborted are not retried (see RetryPolicy).

Source

pub async fn reserve( &self, opts: &ReserveOptions, ) -> Result<Option<Vec<Job>>, ReserveError>

Long-polls for jobs to process.

Blocks up to the options’ wait_timeout for at least one job. Returns Ok(Some(jobs)) with one or more leased Jobs, or Ok(None) if the wait elapsed with nothing available (poll again). Each returned job must be acked, nacked, or extended before its lease expires.

Unlike the other RPCs, reserve is not retried by the RetryPolicy: as a long poll, an empty return is the normal idle outcome and the caller loops anyway. A malformed job in the response is logged and skipped rather than failing the whole batch.

Source

pub async fn ack(&self, ctx: &JobCtx) -> Result<(), LeaseError>

Acknowledges that a job completed successfully, removing it from the queue.

The attempt carried by ctx guards against acking a job whose lease was already reassigned — that surfaces as LeaseError::AttemptMismatch or LeaseError::JobNotFound.

Source

pub async fn nack( &self, ctx: &JobCtx, retry: RetryDirective, reason: impl Into<String>, ) -> Result<bool, LeaseError>

Negatively acknowledges a job, signalling that processing failed.

retry selects what the server does next (see RetryDirective) and reason is recorded for debugging and metrics; an empty reason is omitted from the request rather than sent as an empty string. Returns true if this nack moved the job to the dead-letter queue (because DeadLetter was requested or max_attempts was reached), false if it will be retried.

Source

pub async fn extend( &self, ctx: &JobCtx, extension: Duration, ) -> Result<SystemTime, LeaseError>

Extends a job’s lease by extension, measured from now, returning the new expiry.

Call this when a handler needs longer than the original lease. Equivalent to JobCtx::extend; a Worker with with_auto_extend does it automatically.

Source

pub async fn get_server_info(&self) -> Result<ServerInfo, ClientError>

Fetches the server’s ServerInfo: version, capabilities, and limits.

Useful once at startup so a producer can validate jobs locally against the advertised limits and avoid round-trips that would only be rejected.

Source

pub async fn drain_dead_letters( &self, queue: Option<&str>, max: u32, ) -> Result<Vec<DeadLetterRecord>, ClientError>

Drains dead-lettered jobs for inspection and manual replay.

Returns up to max DeadLetterRecords (oldest-first, optionally filtered to one queue) and removes them from the server; a max of 0 returns an empty vector without making an RPC. This is destructive: the records are gone once returned, so a dropped response loses exactly that batch — for that reason it is not retried by the RetryPolicy. Inspect each record, then replay any you want with DeadLetterRecord::to_enqueue_request.

An empty result means nothing matched, which is indistinguishable from dead-letter retention being disabled — check ServerInfo::dead_letter_retention_enabled.

Trait Implementations§

Source§

impl Clone for SeppClient

Source§

fn clone(&self) -> SeppClient

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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