use uv_configuration::{BuildOptions, IndexStrategy};
use uv_pypi_types::SupportedEnvironments;
use uv_torch::TorchStrategy;
use crate::fork_strategy::ForkStrategy;
use crate::{DependencyMode, ExcludeNewer, PrereleaseMode, ResolutionMode};
#[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct Options {
pub resolution_mode: ResolutionMode,
pub prerelease_mode: PrereleaseMode,
pub dependency_mode: DependencyMode,
pub fork_strategy: ForkStrategy,
pub exclude_newer: ExcludeNewer,
pub index_strategy: IndexStrategy,
pub artifact_environments: SupportedEnvironments,
pub flexibility: Flexibility,
pub build_options: BuildOptions,
pub torch_backend: Option<TorchStrategy>,
}
#[derive(Debug, Default, Clone)]
pub struct OptionsBuilder {
resolution_mode: ResolutionMode,
prerelease_mode: PrereleaseMode,
dependency_mode: DependencyMode,
fork_strategy: ForkStrategy,
exclude_newer: ExcludeNewer,
index_strategy: IndexStrategy,
artifact_environments: SupportedEnvironments,
flexibility: Flexibility,
build_options: BuildOptions,
torch_backend: Option<TorchStrategy>,
}
impl OptionsBuilder {
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn resolution_mode(mut self, resolution_mode: ResolutionMode) -> Self {
self.resolution_mode = resolution_mode;
self
}
#[must_use]
pub fn prerelease_mode(mut self, prerelease_mode: PrereleaseMode) -> Self {
self.prerelease_mode = prerelease_mode;
self
}
#[must_use]
pub fn dependency_mode(mut self, dependency_mode: DependencyMode) -> Self {
self.dependency_mode = dependency_mode;
self
}
#[must_use]
pub fn fork_strategy(mut self, fork_strategy: ForkStrategy) -> Self {
self.fork_strategy = fork_strategy;
self
}
#[must_use]
pub fn exclude_newer(mut self, exclude_newer: ExcludeNewer) -> Self {
self.exclude_newer = exclude_newer;
self
}
#[must_use]
pub fn index_strategy(mut self, index_strategy: IndexStrategy) -> Self {
self.index_strategy = index_strategy;
self
}
#[must_use]
pub fn artifact_environments(mut self, artifact_environments: SupportedEnvironments) -> Self {
self.artifact_environments = artifact_environments;
self
}
#[must_use]
pub fn flexibility(mut self, flexibility: Flexibility) -> Self {
self.flexibility = flexibility;
self
}
#[must_use]
pub fn build_options(mut self, build_options: BuildOptions) -> Self {
self.build_options = build_options;
self
}
#[must_use]
pub fn torch_backend(mut self, torch_backend: Option<TorchStrategy>) -> Self {
self.torch_backend = torch_backend;
self
}
pub fn build(self) -> Options {
Options {
resolution_mode: self.resolution_mode,
prerelease_mode: self.prerelease_mode,
dependency_mode: self.dependency_mode,
fork_strategy: self.fork_strategy,
exclude_newer: self.exclude_newer,
index_strategy: self.index_strategy,
artifact_environments: self.artifact_environments,
flexibility: self.flexibility,
build_options: self.build_options,
torch_backend: self.torch_backend,
}
}
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum Flexibility {
#[default]
Configurable,
Fixed,
}