libsubconverter/settings/external/
conversions.rs

1use super::external_struct::ExternalSettings;
2use super::ini_external::IniExternalSettings;
3use super::toml_external::TomlExternalSettings;
4use super::yaml_external::YamlExternalSettings;
5
6// TODO: Implement template handling and global settings like in C++
7// In C++, there is a template rendering system and global settings
8// that need to be addressed in the conversion process
9
10// Conversion from YamlExternalSettings to ExternalSettings
11impl From<YamlExternalSettings> for ExternalSettings {
12    fn from(yaml_settings: YamlExternalSettings) -> Self {
13        let mut settings = ExternalSettings::default();
14
15        // Copy rule bases
16        settings.clash_rule_base = yaml_settings.custom.rule_bases.clash_rule_base;
17        settings.surge_rule_base = yaml_settings.custom.rule_bases.surge_rule_base;
18        settings.surfboard_rule_base = yaml_settings.custom.rule_bases.surfboard_rule_base;
19        settings.mellow_rule_base = yaml_settings.custom.rule_bases.mellow_rule_base;
20        settings.quan_rule_base = yaml_settings.custom.rule_bases.quan_rule_base;
21        settings.quanx_rule_base = yaml_settings.custom.rule_bases.quanx_rule_base;
22        settings.loon_rule_base = yaml_settings.custom.rule_bases.loon_rule_base;
23        settings.sssub_rule_base = yaml_settings.custom.rule_bases.sssub_rule_base;
24        settings.singbox_rule_base = yaml_settings.custom.rule_bases.singbox_rule_base;
25
26        // Rule generation options
27        settings.enable_rule_generator =
28            Some(yaml_settings.custom.rule_generation.enable_rule_generator);
29        settings.overwrite_original_rules = Some(
30            yaml_settings
31                .custom
32                .rule_generation
33                .overwrite_original_rules,
34        );
35
36        // Emoji options
37        settings.add_emoji = yaml_settings.custom.emoji_settings.add_emoji;
38        settings.remove_old_emoji = yaml_settings.custom.emoji_settings.remove_old_emoji;
39
40        // Filtering options
41        settings.include_remarks = yaml_settings.custom.filtering.include_remarks;
42        settings.exclude_remarks = yaml_settings.custom.filtering.exclude_remarks;
43
44        // Copy processed fields
45        settings.custom_rulesets = yaml_settings.parsed_rulesets;
46        settings.custom_proxy_groups = yaml_settings.parsed_custom_proxy_groups;
47        settings.rename_nodes = yaml_settings.parsed_rename;
48        settings.emojis = yaml_settings.parsed_emojis;
49
50        // Copy template arguments
51        settings.tpl_args = yaml_settings.tpl_args;
52
53        settings
54    }
55}
56
57// Conversion from TomlExternalSettings to ExternalSettings
58impl From<TomlExternalSettings> for ExternalSettings {
59    fn from(toml_settings: TomlExternalSettings) -> Self {
60        let mut settings = ExternalSettings::default();
61
62        // Copy rule bases
63        settings.clash_rule_base = toml_settings.custom.rule_bases.clash_rule_base;
64        settings.surge_rule_base = toml_settings.custom.rule_bases.surge_rule_base;
65        settings.surfboard_rule_base = toml_settings.custom.rule_bases.surfboard_rule_base;
66        settings.mellow_rule_base = toml_settings.custom.rule_bases.mellow_rule_base;
67        settings.quan_rule_base = toml_settings.custom.rule_bases.quan_rule_base;
68        settings.quanx_rule_base = toml_settings.custom.rule_bases.quanx_rule_base;
69        settings.loon_rule_base = toml_settings.custom.rule_bases.loon_rule_base;
70        settings.sssub_rule_base = toml_settings.custom.rule_bases.sssub_rule_base;
71        settings.singbox_rule_base = toml_settings.custom.rule_bases.singbox_rule_base;
72
73        // Rule generation options
74        settings.enable_rule_generator =
75            Some(toml_settings.custom.rule_generation.enable_rule_generator);
76        settings.overwrite_original_rules = Some(
77            toml_settings
78                .custom
79                .rule_generation
80                .overwrite_original_rules,
81        );
82
83        // Emoji options
84        settings.add_emoji = toml_settings.custom.emoji_settings.add_emoji;
85        settings.remove_old_emoji = toml_settings.custom.emoji_settings.remove_old_emoji;
86
87        // Filtering options
88        settings.include_remarks = toml_settings.custom.filtering.include_remarks;
89        settings.exclude_remarks = toml_settings.custom.filtering.exclude_remarks;
90
91        // Copy processed fields
92        settings.custom_rulesets = toml_settings.parsed_rulesets;
93        settings.custom_proxy_groups = toml_settings.parsed_custom_proxy_groups;
94        settings.rename_nodes = toml_settings.parsed_rename;
95        settings.emojis = toml_settings.parsed_emojis;
96
97        // Copy template arguments
98        settings.tpl_args = toml_settings.tpl_args;
99
100        settings
101    }
102}
103
104// Conversion from IniExternalSettings to ExternalSettings
105impl From<IniExternalSettings> for ExternalSettings {
106    fn from(ini_settings: IniExternalSettings) -> Self {
107        let mut settings = ExternalSettings::default();
108
109        // Copy rule bases
110        settings.clash_rule_base = ini_settings.clash_rule_base;
111        settings.surge_rule_base = ini_settings.surge_rule_base;
112        settings.surfboard_rule_base = ini_settings.surfboard_rule_base;
113        settings.mellow_rule_base = ini_settings.mellow_rule_base;
114        settings.quan_rule_base = ini_settings.quan_rule_base;
115        settings.quanx_rule_base = ini_settings.quanx_rule_base;
116        settings.loon_rule_base = ini_settings.loon_rule_base;
117        settings.sssub_rule_base = ini_settings.sssub_rule_base;
118        settings.singbox_rule_base = ini_settings.singbox_rule_base;
119
120        // Rule generation options
121        settings.enable_rule_generator = Some(ini_settings.enable_rule_generator);
122        settings.overwrite_original_rules = Some(ini_settings.overwrite_original_rules);
123
124        // Emoji options
125        settings.add_emoji = ini_settings.add_emoji;
126        settings.remove_old_emoji = ini_settings.remove_old_emoji;
127
128        // Filtering options
129        settings.include_remarks = ini_settings.include_remarks;
130        settings.exclude_remarks = ini_settings.exclude_remarks;
131
132        // Copy processed fields
133        settings.custom_rulesets = ini_settings.parsed_rulesets;
134        settings.custom_proxy_groups = ini_settings.parsed_custom_proxy_groups;
135        settings.rename_nodes = ini_settings.parsed_rename;
136        settings.emojis = ini_settings.parsed_emojis;
137
138        // Copy template arguments
139        settings.tpl_args = ini_settings.tpl_args;
140
141        settings
142    }
143}