pub struct EnhanceApplication { /* private fields */ }Expand description
The POST /v1/issues dispatcher — enqueues via Application::handle,
drains via EnhanceApplication::tick / EnhanceApplication::run_forever.
Implementations§
Source§impl EnhanceApplication
impl EnhanceApplication
Sourcepub fn new(
cfg: EnhanceApplicationConfig,
issue_store: Arc<dyn IssueStore>,
setting_store: Arc<dyn EnhanceSettingStore>,
bp_store: Arc<dyn BlueprintStore>,
log_store: Arc<dyn EnhanceLogStore>,
launch: Arc<TaskLaunchService>,
) -> Self
pub fn new( cfg: EnhanceApplicationConfig, issue_store: Arc<dyn IssueStore>, setting_store: Arc<dyn EnhanceSettingStore>, bp_store: Arc<dyn BlueprintStore>, log_store: Arc<dyn EnhanceLogStore>, launch: Arc<TaskLaunchService>, ) -> Self
Wire up an EnhanceApplication from its config and store/service
dependencies.
Sourcepub fn issue_store(&self) -> &Arc<dyn IssueStore> ⓘ
pub fn issue_store(&self) -> &Arc<dyn IssueStore> ⓘ
The IssueStore this Application enqueues into and drains from.
Sourcepub fn bp_store(&self) -> &Arc<dyn BlueprintStore> ⓘ
pub fn bp_store(&self) -> &Arc<dyn BlueprintStore> ⓘ
The BlueprintStore used to resolve orbit/target Blueprints and
to persist Applied commits.
Sourcepub fn log_store(&self) -> &Arc<dyn EnhanceLogStore> ⓘ
pub fn log_store(&self) -> &Arc<dyn EnhanceLogStore> ⓘ
The EnhanceLogStore every dispatch outcome is appended to.
Sourcepub async fn tick(&self) -> Result<Option<TickOutcome>, EnhanceApplicationError>
pub async fn tick(&self) -> Result<Option<TickOutcome>, EnhanceApplicationError>
Pop one pending issue and dispatch it to the engine. Returns
None when nothing is pending.
dispatch_one returns Err only for infra faults — store,
launch, clock, shape errors, and the like. Flow verifier denials
come back through dispatch_one on the Ok path with a
Rejected status, and the corresponding entry has already been
appended to log_store in the same commit. Even on an infra
fault, tick best-effort tries to update the store-side
status; if the store itself is broken the error propagates.
Sourcepub async fn run_forever(self: Arc<Self>, interval: Duration)
pub async fn run_forever(self: Arc<Self>, interval: Duration)
The consumer loop. At server startup, launch it with
tokio::spawn(app.run_forever(interval)); stop it with
JoinHandle::abort().
Behaviour:
tick()returnsSome→ immediately run another tick (burst drain).tick()returnsNone→ sleep forinterval(no-work back-off).tick()returnsErr→ log it and sleep forinterval(a dispatch failure must not kill the loop).
Trait Implementations§
Source§impl Application for EnhanceApplication
impl Application for EnhanceApplication
Source§fn handle<'life0, 'async_trait>(
&'life0 self,
input: Self::Input,
) -> Pin<Box<dyn Future<Output = Result<Self::Output, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn handle<'life0, 'async_trait>(
&'life0 self,
input: Self::Input,
) -> Pin<Box<dyn Future<Output = Result<Self::Output, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Just push the issue onto IssueStore — a synchronous enqueue;
dispatch is entirely the consumer loop’s job.
Source§type Input = EnhanceApplicationInput
type Input = EnhanceApplicationInput
Source§type Error = EnhanceApplicationError
type Error = EnhanceApplicationError
Auto Trait Implementations§
impl !RefUnwindSafe for EnhanceApplication
impl !UnwindSafe for EnhanceApplication
impl Freeze for EnhanceApplication
impl Send for EnhanceApplication
impl Sync for EnhanceApplication
impl Unpin for EnhanceApplication
impl UnsafeUnpin for EnhanceApplication
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
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>
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