darklua_core/rules/bundle/
require_mode.rs

1use std::str::FromStr;
2
3use serde::{Deserialize, Serialize};
4
5use crate::rules::{require::PathRequireMode, RuleProcessResult};
6use crate::{nodes::Block, rules::Context};
7
8use super::{path_require_mode, BundleOptions};
9
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
11#[serde(deny_unknown_fields, rename_all = "snake_case", tag = "name")]
12pub enum BundleRequireMode {
13    Path(PathRequireMode),
14}
15
16impl From<PathRequireMode> for BundleRequireMode {
17    fn from(mode: PathRequireMode) -> Self {
18        Self::Path(mode)
19    }
20}
21
22impl FromStr for BundleRequireMode {
23    type Err = String;
24
25    fn from_str(s: &str) -> Result<Self, Self::Err> {
26        Ok(match s {
27            "path" => Self::Path(Default::default()),
28            _ => return Err(format!("invalid require mode `{}`", s)),
29        })
30    }
31}
32
33impl Default for BundleRequireMode {
34    fn default() -> Self {
35        Self::Path(Default::default())
36    }
37}
38
39impl BundleRequireMode {
40    pub(crate) fn process_block(
41        &self,
42        block: &mut Block,
43        context: &Context,
44        options: &BundleOptions,
45    ) -> RuleProcessResult {
46        match self {
47            Self::Path(path_require_mode) => {
48                path_require_mode::process_block(block, context, options, path_require_mode)
49            }
50        }
51    }
52}