turbopack_core/chunk/
availability_info.rs1use anyhow::Result;
2use serde::{Deserialize, Serialize};
3use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, Vc, trace::TraceRawVcs};
4
5use super::available_modules::{AvailableModules, AvailableModulesSet};
6
7#[derive(
8 Eq,
9 PartialEq,
10 Hash,
11 Clone,
12 Copy,
13 Debug,
14 TaskInput,
15 TraceRawVcs,
16 NonLocalValue,
17 Serialize,
18 Deserialize,
19)]
20pub enum AvailabilityInfo {
21 Untracked,
23 Root,
25 Complete {
27 available_modules: ResolvedVc<AvailableModules>,
28 },
29}
30
31impl AvailabilityInfo {
32 pub fn available_modules(&self) -> Option<ResolvedVc<AvailableModules>> {
33 match self {
34 Self::Untracked => None,
35 Self::Root => None,
36 Self::Complete {
37 available_modules, ..
38 } => Some(*available_modules),
39 }
40 }
41
42 pub async fn with_modules(self, modules: Vc<AvailableModulesSet>) -> Result<Self> {
43 Ok(match self {
44 AvailabilityInfo::Untracked => AvailabilityInfo::Untracked,
45 AvailabilityInfo::Root => AvailabilityInfo::Complete {
46 available_modules: AvailableModules::new(modules).to_resolved().await?,
47 },
48 AvailabilityInfo::Complete { available_modules } => AvailabilityInfo::Complete {
49 available_modules: available_modules
50 .with_modules(modules)
51 .to_resolved()
52 .await?,
53 },
54 })
55 }
56}