pub fn applier<K, QueueStream, ReconcilerFut, Ctx>(
    reconciler: impl FnMut(Arc<K>, Arc<Ctx>) -> ReconcilerFut,
    error_policy: impl Fn(&<ReconcilerFut as TryFuture>::Error, Arc<Ctx>) -> Action,
    context: Arc<Ctx>,
    store: Store<K>,
    queue: QueueStream
) -> impl Stream<Item = Result<(ObjectRef<K>, Action), Error<<ReconcilerFut as TryFuture>::Error, <QueueStream as TryStream>::Error>>> where
    K: 'static + Clone + Resource,
    ReconcilerFut: TryFuture<Ok = Action> + Unpin,
    QueueStream: TryStream,
    <K as Resource>::DynamicType: Debug,
    <K as Resource>::DynamicType: Eq,
    <K as Resource>::DynamicType: Hash,
    <K as Resource>::DynamicType: Clone,
    <K as Resource>::DynamicType: Unpin,
    <ReconcilerFut as TryFuture>::Error: 'static,
    <ReconcilerFut as TryFuture>::Error: Error,
    <QueueStream as TryStream>::Ok: Into<ReconcileRequest<K>>,
    <QueueStream as TryStream>::Error: 'static,
    <QueueStream as TryStream>::Error: Error
Available on crate feature runtime only.
Expand description

Apply a reconciler to an input stream, with a given retry policy

Takes a store parameter for the core objects, which should usually be updated by a reflector.

The queue indicates which objects should be reconciled. For the core objects this will usually be the reflector (piped through trigger_self). If your core objects own any subobjects then you can also make them trigger reconciliations by merging the reflector with a watcher or reflector for the subobject.

This is the “hard-mode” version of Controller, which allows you some more customization (such as triggering from arbitrary [Stream]s), at the cost of being a bit more verbose.