using Beam.Models; namespace Beam.Downloaders; public class SkipPredicateOptions { public required SkipPredicate?[]? SkipPredicates { get; init; } public bool ProcessInParallel { get; init; } = false; public int? ParallelThreads { get; init; } } public class SkipPredicateOptionsBuilder { private List?> _skipPredicates { get; set; } = []; private bool _processInParallel { get; set; } = false; private int? _parallelThreads { get; set; } public SkipPredicateOptionsBuilder WithSkipPredicate(SkipPredicate predicate, bool replace=false) { if (replace) _skipPredicates.Clear(); _skipPredicates.Add(predicate); return this; } public SkipPredicateOptionsBuilder WithSkipPredicates(SkipPredicate[] predicates, bool replace = true) { if (replace) _skipPredicates.Clear(); _skipPredicates.AddRange(predicates); return this; } public SkipPredicateOptionsBuilder ProcessInParallel(bool processInParallel = true) { _processInParallel = processInParallel; return this; } public SkipPredicateOptionsBuilder WithParallelThreads(int parallelThreads) { _parallelThreads = parallelThreads; return this; } public SkipPredicateOptions Build() { return new SkipPredicateOptions() { SkipPredicates = _skipPredicates.ToArray(), ParallelThreads = _parallelThreads, ProcessInParallel = _processInParallel }; } }