openfare_lib/extension/
common.rs1use anyhow::Result;
2
3#[derive(
4 Debug, Clone, Hash, Eq, PartialEq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
5)]
6pub struct VersionError(String);
7
8impl VersionError {
9 pub fn from_missing_version() -> Self {
10 Self("Missing version number".to_string())
11 }
12
13 pub fn from_parse_error(raw_version_number: &str) -> Self {
14 Self(format!("Version parse error: {}", raw_version_number))
15 }
16
17 pub fn message(&self) -> String {
18 self.0.clone()
19 }
20}
21
22pub type VersionParseResult = std::result::Result<String, VersionError>;
23
24#[derive(
26 Clone, Debug, Hash, Eq, PartialEq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
27)]
28pub struct Dependency {
29 pub name: String,
30 pub version: VersionParseResult,
31}
32
33pub trait DependenciesCollection: Sized {
34 fn registry_host_name(&self) -> &String;
35 fn dependencies(&self) -> &Vec<Dependency>;
36}
37
38#[derive(Clone, Debug, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
40pub struct PackageDependencies {
41 pub package_version: VersionParseResult,
43
44 pub registry_host_name: String,
46
47 pub dependencies: Vec<Dependency>,
49}
50
51impl DependenciesCollection for PackageDependencies {
52 fn registry_host_name(&self) -> &String {
53 &self.registry_host_name
54 }
55 fn dependencies(&self) -> &Vec<Dependency> {
56 &self.dependencies
57 }
58}
59
60#[derive(Clone, Debug, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
62pub struct FileDefinedDependencies {
63 pub path: std::path::PathBuf,
65
66 pub registry_host_name: String,
68
69 pub dependencies: Vec<Dependency>,
71}
72
73impl DependenciesCollection for FileDefinedDependencies {
74 fn registry_host_name(&self) -> &String {
75 &self.registry_host_name
76 }
77 fn dependencies(&self) -> &Vec<Dependency> {
78 &self.dependencies
79 }
80}
81
82#[derive(Debug, Clone, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
83pub struct RegistryPackageMetadata {
84 pub registry_host_name: String,
85 pub human_url: String,
86 pub artifact_url: String,
87 pub is_primary: bool,
89 pub package_version: String,
91}
92
93pub trait FromLib: Extension + Send + Sync {
94 fn new() -> Self
96 where
97 Self: Sized;
98}
99
100pub trait FromProcess: Extension + Send + Sync {
101 fn from_process(
103 process_path: &std::path::PathBuf,
104 extension_config_path: &std::path::PathBuf,
105 ) -> Result<Self>
106 where
107 Self: Sized;
108}
109
110pub trait Extension: Send + Sync {
111 fn name(&self) -> String;
113
114 fn registries(&self) -> Vec<String>;
116
117 fn version(&self) -> String;
119
120 fn package_dependencies_locks(
122 &self,
123 package_name: &str,
124 package_version: &Option<&str>,
125 extension_args: &Vec<String>,
126 ) -> Result<super::commands::package_dependencies_locks::PackageDependenciesLocks>;
127
128 fn project_dependencies_locks(
130 &self,
131 working_directory: &std::path::PathBuf,
132 extension_args: &Vec<String>,
133 ) -> Result<super::commands::project_dependencies_locks::ProjectDependenciesLocks>;
134}