darklua_core/rules/bundle/
require_mode.rs1use 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}