pub struct LayeredGraphProvider<P, F>where
P: GraphConfigSource,
F: GraphConfigSource,{ /* private fields */ }Expand description
Tries the primary GraphConfigSource, falling back to the secondary
when the primary reports the graph missing or has an infrastructure
failure. A Misconfigured error is propagated, never masked by the
fallback — matching greentic_aw_runtime::LayeredConfigProvider’s
semantics exactly.
Fallback triggers:
ConfigError::AgentNotFound— graph absent from the primary (HTTP registry doesn’t know it yet; local pack may have it).ConfigError::Internal— transient infrastructure failure (network timeout, 5xx) — local pack can serve as a degraded fallback.
Non-fallback (surfaces immediately):
ConfigError::Misconfigured— corrupt document or bad auth token; the operator must fix the document — silently serving stale local data would mask the problem.
Implementations§
Source§impl<P, F> LayeredGraphProvider<P, F>where
P: GraphConfigSource,
F: GraphConfigSource,
impl<P, F> LayeredGraphProvider<P, F>where
P: GraphConfigSource,
F: GraphConfigSource,
pub fn new(primary: P, fallback: F) -> LayeredGraphProvider<P, F>
Trait Implementations§
Source§impl<P, F> GraphConfigSource for LayeredGraphProvider<P, F>where
P: GraphConfigSource,
F: GraphConfigSource,
impl<P, F> GraphConfigSource for LayeredGraphProvider<P, F>where
P: GraphConfigSource,
F: GraphConfigSource,
fn graph_config<'a>( &'a self, tenant: &'a TenantContext, graph_id: &'a str, ) -> Pin<Box<dyn Future<Output = Result<GraphConfig, ConfigError>> + Send + 'a>>
Auto Trait Implementations§
impl<P, F> Freeze for LayeredGraphProvider<P, F>
impl<P, F> RefUnwindSafe for LayeredGraphProvider<P, F>where
P: RefUnwindSafe,
F: RefUnwindSafe,
impl<P, F> Send for LayeredGraphProvider<P, F>
impl<P, F> Sync for LayeredGraphProvider<P, F>
impl<P, F> Unpin for LayeredGraphProvider<P, F>
impl<P, F> UnsafeUnpin for LayeredGraphProvider<P, F>where
P: UnsafeUnpin,
F: UnsafeUnpin,
impl<P, F> UnwindSafe for LayeredGraphProvider<P, F>where
P: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<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> 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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request