deps-core 0.2.1

Core abstractions for deps-lsp: caching, errors, and traits
Documentation

Core abstractions for deps-lsp.

This crate provides the foundational traits and utilities used across all ecosystem-specific implementations (Cargo, npm, PyPI, etc.).

Architecture

deps-core defines:

  • Traits: PackageRegistry, ManifestParser, VersionInfo, PackageMetadata
  • HTTP Cache: Shared caching layer with ETag/Last-Modified validation
  • Error Types: Unified error handling across all ecosystems

Examples

Implementing a registry for a new ecosystem:

use deps_core::{PackageRegistry, VersionInfo, PackageMetadata};
use async_trait::async_trait;

#[derive(Clone)]
struct MyVersion {
    version: String,
    deprecated: bool,
}

impl VersionInfo for MyVersion {
    fn version_string(&self) -> &str {
        &self.version
    }

    fn is_yanked(&self) -> bool {
        self.deprecated
    }
}

#[derive(Clone)]
struct MyMetadata {
    name: String,
    latest: String,
}

impl PackageMetadata for MyMetadata {
    fn name(&self) -> &str {
        &self.name
    }

    fn description(&self) -> Option<&str> {
        None
    }

    fn repository(&self) -> Option<&str> {
        None
    }

    fn documentation(&self) -> Option<&str> {
        None
    }

    fn latest_version(&self) -> &str {
        &self.latest
    }
}

struct MyRegistry;

#[async_trait]
impl PackageRegistry for MyRegistry {
    type Version = MyVersion;
    type Metadata = MyMetadata;
    type VersionReq = String;

    async fn get_versions(&self, _name: &str) -> deps_core::error::Result<Vec<Self::Version>> {
        Ok(vec![])
    }

    async fn get_latest_matching(
        &self,
        _name: &str,
        _req: &Self::VersionReq,
    ) -> deps_core::error::Result<Option<Self::Version>> {
        Ok(None)
    }

    async fn search(&self, _query: &str, _limit: usize) -> deps_core::error::Result<Vec<Self::Metadata>> {
        Ok(vec![])
    }
}