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
95pub fn register_ecosystems(registry: &EcosystemRegistry, cache: Arc<HttpCache>) {
97 register!("cargo", CargoEcosystem, registry, &cache);
98 register!("npm", NpmEcosystem, registry, &cache);
99 register!("pypi", PypiEcosystem, registry, &cache);
100 register!("go", GoEcosystem, registry, &cache);
101}
102
103#[cfg(test)]
104mod tests {
105 use super::*;
106
107 #[test]
108 fn test_register_ecosystems() {
109 let registry = Arc::new(EcosystemRegistry::new());
110 let cache = Arc::new(HttpCache::new());
111 register_ecosystems(®istry, Arc::clone(&cache));
112
113 #[cfg(feature = "cargo")]
114 assert!(registry.get("cargo").is_some());
115 #[cfg(feature = "npm")]
116 assert!(registry.get("npm").is_some());
117 #[cfg(feature = "pypi")]
118 assert!(registry.get("pypi").is_some());
119 #[cfg(feature = "go")]
120 assert!(registry.get("go").is_some());
121 }
122}