pkgrisk 0.1.0

5-second package health and risk analysis for npm, PyPI and crates.io dependencies
pub mod crates;
pub mod npm;
pub mod osv;
pub mod pypi;

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PackageMetadata {
    pub name: String,
    pub version: String,
    pub description: Option<String>,
    pub license: Option<String>,
    pub repository_url: Option<String>,
    pub latest_release_date: Option<String>,
    pub dependencies: Vec<String>,
    pub weekly_downloads: Option<u64>,
}

#[derive(Debug, Clone, PartialEq)]
pub enum Ecosystem {
    Npm,
    Pypi,
    Crates,
}

impl Ecosystem {
    pub fn from_str(s: &str) -> Option<Self> {
        match s.to_lowercase().as_str() {
            "npm" => Some(Ecosystem::Npm),
            "pypi" => Some(Ecosystem::Pypi),
            "crates" | "crates.io" | "cargo" => Some(Ecosystem::Crates),
            _ => None,
        }
    }
    
    pub fn as_str(&self) -> &'static str {
        match self {
            Ecosystem::Npm => "npm",
            Ecosystem::Pypi => "pypi",
            Ecosystem::Crates => "crates",
        }
    }
}