deps_core/
lib.rs

1//! Core abstractions for deps-lsp.
2//!
3//! This crate provides the foundational traits and utilities used across
4//! all ecosystem-specific implementations (Cargo, npm, PyPI, etc.).
5//!
6//! # Architecture
7//!
8//! deps-core defines:
9//! - **Traits**: `PackageRegistry`, `ManifestParser`, `VersionInfo`, `PackageMetadata`
10//! - **HTTP Cache**: Shared caching layer with ETag/Last-Modified validation
11//! - **Error Types**: Unified error handling across all ecosystems
12//!
13//! # Examples
14//!
15//! Implementing a registry for a new ecosystem:
16//!
17//! ```no_run
18//! use deps_core::{PackageRegistry, VersionInfo, PackageMetadata};
19//! use async_trait::async_trait;
20//!
21//! #[derive(Clone)]
22//! struct MyVersion {
23//!     version: String,
24//!     deprecated: bool,
25//! }
26//!
27//! impl VersionInfo for MyVersion {
28//!     fn version_string(&self) -> &str {
29//!         &self.version
30//!     }
31//!
32//!     fn is_yanked(&self) -> bool {
33//!         self.deprecated
34//!     }
35//! }
36//!
37//! #[derive(Clone)]
38//! struct MyMetadata {
39//!     name: String,
40//!     latest: String,
41//! }
42//!
43//! impl PackageMetadata for MyMetadata {
44//!     fn name(&self) -> &str {
45//!         &self.name
46//!     }
47//!
48//!     fn description(&self) -> Option<&str> {
49//!         None
50//!     }
51//!
52//!     fn repository(&self) -> Option<&str> {
53//!         None
54//!     }
55//!
56//!     fn documentation(&self) -> Option<&str> {
57//!         None
58//!     }
59//!
60//!     fn latest_version(&self) -> &str {
61//!         &self.latest
62//!     }
63//! }
64//!
65//! struct MyRegistry;
66//!
67//! #[async_trait]
68//! impl PackageRegistry for MyRegistry {
69//!     type Version = MyVersion;
70//!     type Metadata = MyMetadata;
71//!     type VersionReq = String;
72//!
73//!     async fn get_versions(&self, _name: &str) -> deps_core::error::Result<Vec<Self::Version>> {
74//!         Ok(vec![])
75//!     }
76//!
77//!     async fn get_latest_matching(
78//!         &self,
79//!         _name: &str,
80//!         _req: &Self::VersionReq,
81//!     ) -> deps_core::error::Result<Option<Self::Version>> {
82//!         Ok(None)
83//!     }
84//!
85//!     async fn search(&self, _query: &str, _limit: usize) -> deps_core::error::Result<Vec<Self::Metadata>> {
86//!         Ok(vec![])
87//!     }
88//! }
89//! ```
90
91pub mod cache;
92pub mod error;
93pub mod handler;
94pub mod lockfile;
95pub mod macros;
96pub mod parser;
97pub mod registry;
98pub mod version_matcher;
99
100// Re-export commonly used types
101pub use cache::{CachedResponse, HttpCache};
102pub use error::{DepsError, Result};
103pub use handler::{
104    DiagnosticsConfig, EcosystemHandler, InlayHintsConfig, VersionStringGetter, YankedChecker,
105    generate_code_actions, generate_diagnostics, generate_hover, generate_inlay_hints,
106};
107pub use lockfile::{LockFileProvider, ResolvedPackage, ResolvedPackages, ResolvedSource};
108pub use parser::{DependencyInfo, DependencySource, ManifestParser, ParseResultInfo};
109pub use registry::{PackageMetadata, PackageRegistry, VersionInfo};
110pub use version_matcher::{
111    Pep440Matcher, SemverMatcher, VersionRequirementMatcher, extract_pypi_min_version,
112    normalize_and_parse_version,
113};