pub struct EndpointsGetOptionsBuilder<'a>(_);
Expand description
获取终端地址列表的选项构建器
Implementations§
source§impl<'a> GetOptionsBuilder<'a>
impl<'a> GetOptionsBuilder<'a>
sourcepub fn service_names(&mut self, service_names: &'a [ServiceName]) -> &mut Self
pub fn service_names(&mut self, service_names: &'a [ServiceName]) -> &mut Self
设置服务列表
Examples found in repository?
src/client/call/request_call.rs (line 18)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
pub(in super::super) fn request_call<E: EndpointsProvider>(
request: SyncInnerRequest<'_, E>,
) -> ApiResult<SyncResponse> {
let (parts, mut body, into_endpoints, service_name, extensions) = request.split();
let options = EndpointsGetOptions::builder().service_names(service_name).build();
let endpoints = into_endpoints.get_endpoints(options)?;
let mut tried_ips = IpAddrsSet::default();
let mut retried = RetriedStatsInfo::default();
return match try_preferred_endpoints(
endpoints.preferred(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
) {
Ok(response) => Ok(response),
Err(err)
if err.retry_decision() == RetryDecision::TryAlternativeEndpoints
&& !endpoints.alternative().is_empty() =>
{
let (_, extensions) = err.split();
retried.switch_to_alternative_endpoints();
debug!("Switch to alternative endpoints");
try_alternative_endpoints(
endpoints.alternative(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
}
Err(err) => Err(err.into_response_error()),
};
fn try_preferred_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut SyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> Result<SyncResponse, TryErrorWithExtensions> {
try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, true)
}
fn try_alternative_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut SyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> ApiResult<SyncResponse> {
try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, false)
.map_err(|err| err.into_response_error())
}
}
#[cfg(feature = "async")]
use super::{
super::{request::AsyncInnerRequest, AsyncRequestBody, AsyncResponse},
try_endpoints::async_try_endpoints,
};
#[cfg(feature = "async")]
pub(in super::super) async fn async_request_call<E: EndpointsProvider>(
request: AsyncInnerRequest<'_, E>,
) -> ApiResult<AsyncResponse> {
let (parts, mut body, into_endpoints, service_name, extensions) = request.split();
let options = EndpointsGetOptions::builder().service_names(service_name).build();
let endpoints = into_endpoints.async_get_endpoints(options).await?;
let mut tried_ips = IpAddrsSet::default();
let mut retried = RetriedStatsInfo::default();
return match try_preferred_endpoints(
endpoints.preferred(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
.await
{
Ok(response) => Ok(response),
Err(err)
if err.retry_decision() == RetryDecision::TryAlternativeEndpoints
&& !endpoints.alternative().is_empty() =>
{
let (_, extensions) = err.split();
retried.switch_to_alternative_endpoints();
debug!("Switch to alternative endpoints");
try_alternative_endpoints(
endpoints.alternative(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
.await
}
Err(err) => Err(err.into_response_error()),
};
async fn try_preferred_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut AsyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> Result<AsyncResponse, TryErrorWithExtensions> {
async_try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, true).await
}
async fn try_alternative_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut AsyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> ApiResult<AsyncResponse> {
async_try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, false)
.await
.map_err(|err| err.into_response_error())
}
}
sourcepub fn build(&mut self) -> GetOptions<'a>
pub fn build(&mut self) -> GetOptions<'a>
构建获取终端地址列表的选项
Examples found in repository?
src/client/call/request_call.rs (line 18)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
pub(in super::super) fn request_call<E: EndpointsProvider>(
request: SyncInnerRequest<'_, E>,
) -> ApiResult<SyncResponse> {
let (parts, mut body, into_endpoints, service_name, extensions) = request.split();
let options = EndpointsGetOptions::builder().service_names(service_name).build();
let endpoints = into_endpoints.get_endpoints(options)?;
let mut tried_ips = IpAddrsSet::default();
let mut retried = RetriedStatsInfo::default();
return match try_preferred_endpoints(
endpoints.preferred(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
) {
Ok(response) => Ok(response),
Err(err)
if err.retry_decision() == RetryDecision::TryAlternativeEndpoints
&& !endpoints.alternative().is_empty() =>
{
let (_, extensions) = err.split();
retried.switch_to_alternative_endpoints();
debug!("Switch to alternative endpoints");
try_alternative_endpoints(
endpoints.alternative(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
}
Err(err) => Err(err.into_response_error()),
};
fn try_preferred_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut SyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> Result<SyncResponse, TryErrorWithExtensions> {
try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, true)
}
fn try_alternative_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut SyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> ApiResult<SyncResponse> {
try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, false)
.map_err(|err| err.into_response_error())
}
}
#[cfg(feature = "async")]
use super::{
super::{request::AsyncInnerRequest, AsyncRequestBody, AsyncResponse},
try_endpoints::async_try_endpoints,
};
#[cfg(feature = "async")]
pub(in super::super) async fn async_request_call<E: EndpointsProvider>(
request: AsyncInnerRequest<'_, E>,
) -> ApiResult<AsyncResponse> {
let (parts, mut body, into_endpoints, service_name, extensions) = request.split();
let options = EndpointsGetOptions::builder().service_names(service_name).build();
let endpoints = into_endpoints.async_get_endpoints(options).await?;
let mut tried_ips = IpAddrsSet::default();
let mut retried = RetriedStatsInfo::default();
return match try_preferred_endpoints(
endpoints.preferred(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
.await
{
Ok(response) => Ok(response),
Err(err)
if err.retry_decision() == RetryDecision::TryAlternativeEndpoints
&& !endpoints.alternative().is_empty() =>
{
let (_, extensions) = err.split();
retried.switch_to_alternative_endpoints();
debug!("Switch to alternative endpoints");
try_alternative_endpoints(
endpoints.alternative(),
&parts,
&mut body,
extensions,
&mut tried_ips,
&mut retried,
)
.await
}
Err(err) => Err(err.into_response_error()),
};
async fn try_preferred_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut AsyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> Result<AsyncResponse, TryErrorWithExtensions> {
async_try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, true).await
}
async fn try_alternative_endpoints(
endpoints: &[Endpoint],
parts: &InnerRequestParts<'_>,
body: &mut AsyncRequestBody<'_>,
extensions: Extensions,
tried_ips: &mut IpAddrsSet,
retried: &mut RetriedStatsInfo,
) -> ApiResult<AsyncResponse> {
async_try_endpoints(endpoints, parts, body, extensions, tried_ips, retried, false)
.await
.map_err(|err| err.into_response_error())
}
}
Trait Implementations§
source§impl<'a> Clone for GetOptionsBuilder<'a>
impl<'a> Clone for GetOptionsBuilder<'a>
source§fn clone(&self) -> GetOptionsBuilder<'a>
fn clone(&self) -> GetOptionsBuilder<'a>
Returns a copy 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 moresource§impl<'a> Debug for GetOptionsBuilder<'a>
impl<'a> Debug for GetOptionsBuilder<'a>
source§impl<'a> Default for GetOptionsBuilder<'a>
impl<'a> Default for GetOptionsBuilder<'a>
source§fn default() -> GetOptionsBuilder<'a>
fn default() -> GetOptionsBuilder<'a>
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl<'a> RefUnwindSafe for GetOptionsBuilder<'a>
impl<'a> Send for GetOptionsBuilder<'a>
impl<'a> Sync for GetOptionsBuilder<'a>
impl<'a> Unpin for GetOptionsBuilder<'a>
impl<'a> UnwindSafe for GetOptionsBuilder<'a>
Blanket Implementations§
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
Borrows
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Immutable access to the
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
Mutable access to the
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
Immutable access to the
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
Mutable access to the
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
Immutable access to the
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Mutable access to the
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.