1use serde::{Deserialize, Serialize};
2use turbo_tasks::{NonLocalValue, ResolvedVc, Vc, trace::TraceRawVcs};
3
4use crate::{asset::Asset, ident::AssetIdent, reference::ModuleReferences};
5
6#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, TraceRawVcs, NonLocalValue)]
7pub enum StyleType {
8 IsolatedStyle,
9 GlobalStyle,
10}
11
12#[turbo_tasks::value(transparent)]
13pub struct OptionStyleType(Option<StyleType>);
14
15#[turbo_tasks::value_trait]
18pub trait Module: Asset {
19 fn ident(&self) -> Vc<AssetIdent>;
22
23 fn references(self: Vc<Self>) -> Vc<ModuleReferences> {
26 ModuleReferences::empty()
27 }
28
29 fn is_self_async(self: Vc<Self>) -> Vc<bool> {
31 Vc::cell(false)
32 }
33
34 fn style_type(self: Vc<Self>) -> Vc<OptionStyleType> {
36 Vc::cell(None)
37 }
38}
39
40#[turbo_tasks::value(transparent)]
41pub struct OptionModule(Option<ResolvedVc<Box<dyn Module>>>);
42
43#[turbo_tasks::value(transparent)]
44pub struct Modules(Vec<ResolvedVc<Box<dyn Module>>>);
45
46#[turbo_tasks::value_impl]
47impl Modules {
48 #[turbo_tasks::function]
49 pub fn empty() -> Vc<Self> {
50 Vc::cell(Vec::new())
51 }
52}