fn upsert_inner<G: Scope, O: ExchangeData + Ord, F, Fut, US>(
    input: &Collection<G, (UpsertKey, Option<Result<Row, UpsertError>>, O), Diff>,
    key_indices: Vec<usize>,
    resume_upper: Antichain<G::Timestamp>,
    previous: Collection<G, Result<Row, DataflowError>, Diff>,
    previous_token: Option<Vec<PressOnDropButton>>,
    upsert_metrics: UpsertMetrics,
    source_config: RawSourceCreationConfig,
    state: F,
    upsert_config: UpsertConfig
) -> (Collection<G, Result<Row, DataflowError>, Diff>, Stream<G, (usize, HealthStatusUpdate)>, PressOnDropButton)where
    G::Timestamp: TotalOrder,
    F: FnOnce() -> Fut + 'static,
    Fut: Future<Output = US>,
    US: UpsertStateBackend,