1pub mod config;
2pub mod document;
3pub mod file_watcher;
4pub mod handlers;
5pub mod progress;
6pub mod server;
7
8#[cfg(test)]
9mod test_utils;
10
11use std::sync::Arc;
12
13pub use deps_core::{DepsError, EcosystemRegistry, HttpCache, Result};
14pub use server::Backend;
15
16macro_rules! ecosystem {
18 ($feature:literal, $crate_name:ident, $ecosystem:ident, [$($types:ident),* $(,)?]) => {
19 #[cfg(feature = $feature)]
20 pub use $crate_name::{$ecosystem, $($types),*};
21 };
22}
23
24macro_rules! register {
26 ($feature:literal, $ecosystem:ident, $registry:expr, $cache:expr) => {
27 #[cfg(feature = $feature)]
28 $registry.register(Arc::new($ecosystem::new(Arc::clone($cache))));
29 };
30}
31
32ecosystem!(
37 "cargo",
38 deps_cargo,
39 CargoEcosystem,
40 [
41 CargoParser,
42 CargoVersion,
43 CrateInfo,
44 CratesIoRegistry,
45 DependencySection,
46 DependencySource,
47 ParseResult,
48 ParsedDependency,
49 parse_cargo_toml,
50 ]
51);
52
53ecosystem!(
54 "npm",
55 deps_npm,
56 NpmEcosystem,
57 [
58 NpmDependency,
59 NpmDependencySection,
60 NpmPackage,
61 NpmParseResult,
62 NpmRegistry,
63 NpmVersion,
64 parse_package_json,
65 ]
66);
67
68ecosystem!(
69 "pypi",
70 deps_pypi,
71 PypiEcosystem,
72 [
73 PypiDependency,
74 PypiDependencySection,
75 PypiParser,
76 PypiRegistry,
77 PypiVersion,
78 ]
79);
80
81ecosystem!(
82 "go",
83 deps_go,
84 GoEcosystem,
85 [
86 GoDependency,
87 GoDirective,
88 GoParseResult,
89 GoRegistry,
90 GoVersion,
91 parse_go_mod,
92 ]
93);
94
95ecosystem!(
96 "bundler",
97 deps_bundler,
98 BundlerEcosystem,
99 [
100 BundlerDependency,
101 BundlerParseResult,
102 BundlerVersion,
103 DependencyGroup,
104 GemInfo,
105 GemfileLockParser,
106 RubyGemsRegistry,
107 parse_gemfile,
108 ]
109);
110
111ecosystem!(
112 "dart",
113 deps_dart,
114 DartEcosystem,
115 [
116 DartDependency,
117 DartParseResult,
118 DartVersion,
119 DartFormatter,
120 PackageInfo,
121 PubDevRegistry,
122 PubspecLockParser,
123 parse_pubspec_yaml,
124 ]
125);
126
127ecosystem!(
128 "maven",
129 deps_maven,
130 MavenEcosystem,
131 [
132 MavenDependency,
133 MavenParseResult,
134 MavenVersion,
135 MavenFormatter,
136 ArtifactInfo,
137 MavenCentralRegistry,
138 parse_pom_xml,
139 ]
140);
141
142ecosystem!(
143 "gradle",
144 deps_gradle,
145 GradleEcosystem,
146 [
147 GradleDependency,
148 GradleParseResult,
149 GradleVersion,
150 GradleFormatter,
151 parse_gradle,
152 ]
153);
154
155ecosystem!(
156 "swift",
157 deps_swift,
158 SwiftEcosystem,
159 [
160 SwiftDependency,
161 SwiftParseResult,
162 SwiftVersion,
163 SwiftPackage,
164 SwiftFormatter,
165 SwiftRegistry,
166 SwiftLockParser,
167 parse_package_swift,
168 ]
169);
170
171ecosystem!(
172 "composer",
173 deps_composer,
174 ComposerEcosystem,
175 [
176 ComposerDependency,
177 ComposerSection,
178 ComposerPackage,
179 ComposerParseResult,
180 PackagistRegistry,
181 ComposerVersion,
182 parse_composer_json,
183 ]
184);
185
186pub fn register_ecosystems(registry: &EcosystemRegistry, cache: Arc<HttpCache>) {
188 register!("cargo", CargoEcosystem, registry, &cache);
189 register!("npm", NpmEcosystem, registry, &cache);
190 register!("pypi", PypiEcosystem, registry, &cache);
191 register!("go", GoEcosystem, registry, &cache);
192 register!("bundler", BundlerEcosystem, registry, &cache);
193 register!("dart", DartEcosystem, registry, &cache);
194 register!("maven", MavenEcosystem, registry, &cache);
195 register!("gradle", GradleEcosystem, registry, &cache);
196 register!("swift", SwiftEcosystem, registry, &cache);
197 register!("composer", ComposerEcosystem, registry, &cache);
198}
199
200#[cfg(test)]
201mod tests {
202 use super::*;
203
204 #[test]
205 fn test_register_ecosystems() {
206 let registry = Arc::new(EcosystemRegistry::new());
207 let cache = Arc::new(HttpCache::new());
208 register_ecosystems(®istry, Arc::clone(&cache));
209
210 #[cfg(feature = "cargo")]
211 assert!(registry.get("cargo").is_some());
212 #[cfg(feature = "npm")]
213 assert!(registry.get("npm").is_some());
214 #[cfg(feature = "pypi")]
215 assert!(registry.get("pypi").is_some());
216 #[cfg(feature = "go")]
217 assert!(registry.get("go").is_some());
218 #[cfg(feature = "bundler")]
219 assert!(registry.get("bundler").is_some());
220 #[cfg(feature = "dart")]
221 assert!(registry.get("dart").is_some());
222 #[cfg(feature = "maven")]
223 assert!(registry.get("maven").is_some());
224 #[cfg(feature = "composer")]
225 assert!(registry.get("composer").is_some());
226 }
227}