agentshield/ir/
dependency_surface.rs1use serde::{Deserialize, Serialize};
2use std::path::PathBuf;
3
4use super::SourceLocation;
5
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct DependencySurface {
9 pub dependencies: Vec<Dependency>,
11 pub lockfile: Option<LockfileInfo>,
13 pub issues: Vec<DependencyIssue>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct Dependency {
19 pub name: String,
20 pub version_constraint: Option<String>,
21 pub locked_version: Option<String>,
22 pub locked_hash: Option<String>,
23 pub registry: String,
25 pub is_dev: bool,
26 pub location: Option<SourceLocation>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct LockfileInfo {
31 pub path: PathBuf,
32 pub format: LockfileFormat,
33 pub all_pinned: bool,
34 pub all_hashed: bool,
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
38#[serde(rename_all = "snake_case")]
39pub enum LockfileFormat {
40 PipRequirements,
41 PipenvLock,
42 PoetryLock,
43 UvLock,
44 NpmLock,
45 PnpmLock,
46 YarnLock,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct DependencyIssue {
51 pub issue_type: DependencyIssueType,
52 pub package_name: String,
53 pub description: String,
54}
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
57#[serde(rename_all = "snake_case")]
58pub enum DependencyIssueType {
59 Unpinned,
60 NoHash,
61 PossibleTyposquat,
62 NoLockfile,
63}