pub struct SuotarClient {
api_base_url: Url,
authorization: SecretString,
audit: Arc<dyn SuotarCallAudit>,
exchanges: Arc<AtomicU64>,
}Fields§
§api_base_url: Url§audit: Arc<dyn SuotarCallAudit>§exchanges: Arc<AtomicU64>Requests that actually left for the study registry, shared by every clone of the client. The circuit breaker reads it to tell an iteration that heard from the registry from one that found nothing to ask about; a pre-flight refusal is not counted because it never reached it.
Implementations§
Source§impl SuotarClient
impl SuotarClient
pub fn new( config: &SuotarConfiguration, audit: Arc<dyn SuotarCallAudit>, ) -> Self
pub fn mock_for_test() -> Self
Sourcepub fn exchange_count(&self) -> u64
pub fn exchange_count(&self) -> u64
How many requests this client has sent, monotonic for the life of the process. Compare two readings to learn whether the work between them reached the study registry at all.
pub async fn resolve_persons( &self, context: SuotarCallContext, items: Vec<ResolvePersonRequestItem>, ) -> UtilResult<SuotarBatchResponse<PersonResult>>
pub async fn resolve_enrolments( &self, context: SuotarCallContext, items: Vec<ResolveEnrolmentRequestItem>, ) -> UtilResult<SuotarBatchResponse<EnrolmentResolutionResult>>
pub async fn import_attainments( &self, context: SuotarCallContext, items: Vec<ImportAttainmentRequestItem>, ) -> UtilResult<SuotarBatchResponse<ImportAttainmentResult>>
pub async fn verify_attainments( &self, context: SuotarCallContext, items: Vec<VerifyAttainmentRequestItem>, ) -> UtilResult<SuotarBatchResponse<VerifyAttainmentResult>>
pub async fn resolve_product_access_tokens( &self, context: SuotarCallContext, items: Vec<ProductAccessTokenRequestItem>, ) -> UtilResult<SuotarBatchResponse<ProductAccessTokenResult>>
pub async fn list_enrolments_by_course( &self, context: SuotarCallContext, items: Vec<ListByCourseRequestItem>, ) -> UtilResult<SuotarBatchResponse<EnrolmentsListedResult>>
async fn post_batch<T: SuotarRequestItem, R: DeserializeOwned>( &self, endpoint: SuotarEndpoint, context: SuotarCallContext, items: Vec<T>, ) -> UtilResult<SuotarBatchResponse<R>>
Sourceasync fn refused<R>(
&self,
call_id: Option<Uuid>,
error: UtilError,
) -> UtilResult<SuotarBatchResponse<R>>
async fn refused<R>( &self, call_id: Option<Uuid>, error: UtilError, ) -> UtilResult<SuotarBatchResponse<R>>
Records a pre-flight refusal as the suotar_api_calls row any other failure would leave.
Sourceasync fn exchange<R: DeserializeOwned>(
&self,
endpoint: SuotarEndpoint,
request: RequestBuilder,
body: Vec<u8>,
sent_ids: Vec<String>,
clock: Instant,
) -> (UtilResult<SuotarBatchResponse<R>>, SuotarCallFinished)
async fn exchange<R: DeserializeOwned>( &self, endpoint: SuotarEndpoint, request: RequestBuilder, body: Vec<u8>, sent_ids: Vec<String>, clock: Instant, ) -> (UtilResult<SuotarBatchResponse<R>>, 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