Skip to main content

kotoba_package_manager/
dependency.rs

1//! 依存関係管理モジュール
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use url::Url;
6
7/// パッケージの取得元
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
9#[serde(rename_all = "snake_case")]
10pub enum PackageSource {
11    Registry(String), // Kotoba or Npm registry
12    Git(GitSource),
13    Url(Url),
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
17pub struct GitSource {
18    pub url: Url,
19    pub revision: String, // branch, tag, or commit hash
20}
21
22/// パッケージ情報
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct Package {
25    pub name: String,
26    pub version: String,
27    pub source: PackageSource,
28    pub cid: Option<String>,
29    pub tarball_url: Option<String>,
30    pub description: Option<String>,
31    pub authors: Vec<String>,
32    pub dependencies: HashMap<String, DependencyInfo>,
33    pub dev_dependencies: HashMap<String, DependencyInfo>,
34    pub repository: Option<String>,
35    pub license: Option<String>,
36    pub keywords: Vec<String>,
37}
38
39/// 依存関係情報
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct DependencyInfo {
42    pub version: String,
43    #[serde(flatten)]
44    pub source: Option<PackageSource>,
45}
46
47/// プロジェクト設定
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct ProjectConfig {
50    pub name: String,
51    pub version: String,
52    pub description: Option<String>,
53    pub dependencies: HashMap<String, DependencyInfo>,
54    pub dev_dependencies: HashMap<String, DependencyInfo>,
55    pub scripts: HashMap<String, String>,
56}