pub struct SuotarClient {
api_base_url: Url,
authorization: SecretString,
audit: Arc<dyn SuotarCallAudit>,
allow_http: bool,
}Fields§
§api_base_url: Url§audit: Arc<dyn SuotarCallAudit>§allow_http: boolWhether a plain-http api_base_url is sent to rather than refused. Only TEST_MODE or the
test-only new_allowing_http sets it: production must never reach Suotar over http.
Implementations§
Source§impl SuotarClient
impl SuotarClient
Sourcepub fn new(
config: &SuotarConfiguration,
audit: Arc<dyn SuotarCallAudit>,
) -> Self
pub fn new( config: &SuotarConfiguration, audit: Arc<dyn SuotarCallAudit>, ) -> Self
The client for the configured Suotar. Build it at startup: it builds the shared HTTP client, which panics if it cannot.
Sourcepub async fn post<E: BatchEndpoint>(
&self,
context: SuotarCallContext,
items: Vec<E::Item>,
) -> Result<SuotarBatchResponse<E::Result>, SuotarError>
pub async fn post<E: BatchEndpoint>( &self, context: SuotarCallContext, items: Vec<E::Item>, ) -> Result<SuotarBatchResponse<E::Result>, SuotarError>
Sends one batch to E’s endpoint. An empty batch is not sent.
Sourceasync fn refused<R>(
&self,
call_id: Option<Uuid>,
error: SuotarError,
) -> Result<SuotarBatchResponse<R>, SuotarError>
async fn refused<R>( &self, call_id: Option<Uuid>, error: SuotarError, ) -> Result<SuotarBatchResponse<R>, SuotarError>
Finishes the suotar_api_calls row of a call that never left, tagged so the health rules can
tell our own refusal from Suotar being unreachable.
Sourceasync fn exchange<R: DeserializeOwned>(
&self,
endpoint: SuotarEndpoint,
request: RequestBuilder,
body: Vec<u8>,
sent_ids: Vec<String>,
clock: Instant,
) -> (Result<SuotarBatchResponse<R>, SuotarError>, SuotarCallFinished)
async fn exchange<R: DeserializeOwned>( &self, endpoint: SuotarEndpoint, request: RequestBuilder, body: Vec<u8>, sent_ids: Vec<String>, clock: Instant, ) -> (Result<SuotarBatchResponse<R>, SuotarError>, SuotarCallFinished)
Returns the audit record alongside the result: only this function knows the status, the duration and the request-level code, and the row needs all three.
Trait Implementations§
Source§impl Clone for SuotarClient
impl Clone for SuotarClient
Source§fn clone(&self) -> SuotarClient
fn clone(&self) -> SuotarClient
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SuotarClient
impl !RefUnwindSafe for SuotarClient
impl Send for SuotarClient
impl Sync for SuotarClient
impl Unpin for SuotarClient
impl UnsafeUnpin for SuotarClient
impl !UnwindSafe for SuotarClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
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].§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Apply a transformation to the response body. Read more
§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Decompress response bodies. Read more
§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using HTTP status codes. Read more
§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using gRPC headers. Read more