turbopack_core/chunk/
availability_info.rs1use anyhow::Result;
2use turbo_tasks::{ResolvedVc, Vc};
3
4use super::available_modules::{AvailableModules, AvailableModulesSet};
5
6#[turbo_tasks::value(serialization = "auto_for_input")]
7#[derive(Hash, Clone, Copy, Debug)]
8pub enum AvailabilityInfo {
9 Untracked,
11 Root,
13 Complete {
15 available_modules: ResolvedVc<AvailableModules>,
16 },
17}
18
19impl AvailabilityInfo {
20 pub fn available_modules(&self) -> Option<ResolvedVc<AvailableModules>> {
21 match self {
22 Self::Untracked => None,
23 Self::Root => None,
24 Self::Complete {
25 available_modules, ..
26 } => Some(*available_modules),
27 }
28 }
29
30 pub async fn with_modules(self, modules: Vc<AvailableModulesSet>) -> Result<Self> {
31 Ok(match self {
32 AvailabilityInfo::Untracked => AvailabilityInfo::Untracked,
33 AvailabilityInfo::Root => AvailabilityInfo::Complete {
34 available_modules: AvailableModules::new(modules).to_resolved().await?,
35 },
36 AvailabilityInfo::Complete { available_modules } => AvailabilityInfo::Complete {
37 available_modules: available_modules
38 .with_modules(modules)
39 .to_resolved()
40 .await?,
41 },
42 })
43 }
44}