pub async fn start_approval_worker<WorkProvider: ApprovalVotingWorkProvider + Send + 'static, Sender: SubsystemSender<ChainApiMessage> + SubsystemSender<RuntimeApiMessage> + SubsystemSender<ChainSelectionMessage> + SubsystemSender<AvailabilityRecoveryMessage> + SubsystemSender<DisputeCoordinatorMessage> + SubsystemSender<CandidateValidationMessage> + Clone, ADSender: SubsystemSender<ApprovalDistributionMessage>>(
    work_provider: WorkProvider,
    to_other_subsystems: Sender,
    to_approval_distr: ADSender,
    config: Config,
    db: Arc<dyn Database>,
    keystore: Arc<LocalKeystore>,
    sync_oracle: Box<dyn SyncOracle + Send>,
    metrics: Metrics,
    spawner: Arc<dyn Spawner + 'static>,
    task_name: &'static str,
    group_name: &'static str,
    clock: Arc<dyn Clock + Send + Sync>
) -> SubsystemResult<()>