perf: remove unneeded class indirection for dynamic pool in worker
[poolifier.git] / src / pools / selection-strategies / selection-strategies-utils.ts
CommitLineData
bdaf31cd 1import type { IPoolInternal } from '../pool-internal'
ea7a90d3 2import type { IPoolWorker } from '../pool-worker'
23ff945a 3import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy'
168c526f 4import { LessBusyWorkerChoiceStrategy } from './less-busy-worker-choice-strategy'
737c6d97 5import { LessUsedWorkerChoiceStrategy } from './less-used-worker-choice-strategy'
bdaf31cd
JB
6import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy'
7import type {
8 IWorkerChoiceStrategy,
9 WorkerChoiceStrategy
10} from './selection-strategies-types'
11import { WorkerChoiceStrategies } from './selection-strategies-types'
fa6f1296 12import { WeightedRoundRobinWorkerChoiceStrategy } from './weighted-round-robin-worker-choice-strategy'
bdaf31cd
JB
13
14/**
78cea37e
JB
15 * Gets the worker choice strategy instance.
16 *
38e795c1
JB
17 * @param pool - The pool instance.
18 * @param workerChoiceStrategy - The worker choice strategy.
78cea37e 19 * @returns The worker choice strategy instance.
bdaf31cd 20 */
78cea37e
JB
21export function getWorkerChoiceStrategy<
22 Worker extends IPoolWorker,
23 Data,
24 Response
25> (
26 pool: IPoolInternal<Worker, Data, Response>,
27 workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
c923ce56 28): IWorkerChoiceStrategy {
78cea37e
JB
29 switch (workerChoiceStrategy) {
30 case WorkerChoiceStrategies.ROUND_ROBIN:
c923ce56 31 return new RoundRobinWorkerChoiceStrategy<Worker, Data, Response>(pool)
737c6d97 32 case WorkerChoiceStrategies.LESS_USED:
c923ce56 33 return new LessUsedWorkerChoiceStrategy<Worker, Data, Response>(pool)
168c526f 34 case WorkerChoiceStrategies.LESS_BUSY:
c923ce56 35 return new LessBusyWorkerChoiceStrategy<Worker, Data, Response>(pool)
78cea37e 36 case WorkerChoiceStrategies.FAIR_SHARE:
c923ce56 37 return new FairShareWorkerChoiceStrategy<Worker, Data, Response>(pool)
78cea37e 38 case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN:
c923ce56
JB
39 return new WeightedRoundRobinWorkerChoiceStrategy<Worker, Data, Response>(
40 pool
41 )
78cea37e
JB
42 default:
43 throw new Error(
44 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
45 `Worker choice strategy '${workerChoiceStrategy}' not found`
46 )
bdaf31cd
JB
47 }
48}