diff --git a/src/structs/mod.rs b/src/structs/mod.rs index 1d288c8..6e5a70a 100644 --- a/src/structs/mod.rs +++ b/src/structs/mod.rs @@ -1,5 +1,6 @@ use serde::{Deserialize, Serialize}; +pub mod package; pub mod release; pub mod repo; diff --git a/src/structs/package.rs b/src/structs/package.rs new file mode 100644 index 0000000..8b88efc --- /dev/null +++ b/src/structs/package.rs @@ -0,0 +1,92 @@ +use colored::Colorize; +use serde::{Deserialize, Serialize}; + +use crate::structs::release::Author; + +/// Represents the package as described by JSON +/// +/// https://github.com/go-gitea/gitea/blob/main/modules/structs/package.go +#[derive(Debug, Deserialize, Serialize)] +pub struct Package { + crated_at: String, // TODO: Datetime struct + creator: Author, + html_url: String, + id: u64, + name: String, + owner: Author, + repository: (), // TODO: Create a `struct Repository` + pkg_type: PackageType, // field is "type" in Go, but that's a keyword in Rust. + version: String, +} + +impl Package { + pub fn colorized(&self) -> String { + let name = "Name:".green().bold(); + let version = "Ver:".green(); + let pkg_type = "Type:".white(); + + format!( + "{name} {} +{version} {}, {pkg_type} {}", + self.name, + self.version, + self.pkg_type.to_string(), + ) + } +} + +/// A marker for the kind of package being handled. +#[derive(Debug, Deserialize, Serialize)] +pub enum PackageType { + Alpine, + Arch, + Cargo, + Chef, + Composer, + Conan, + Conda, + Container, + Cran, + Debian, + Generic, + Go, + Helm, + Maven, + Npm, + Nuget, + Pub, + PyPi, + Rpm, + RubyGems, + Swift, + Vagrant, +} + +impl ToString for PackageType { + fn to_string(&self) -> String { + match self { + PackageType::Alpine => "alpine".into(), + PackageType::Arch => "arch".into(), + PackageType::Cargo => "cargo".into(), + PackageType::Chef => "chef".into(), + PackageType::Composer => "composer".into(), + PackageType::Conan => "conan".into(), + PackageType::Conda => "conda".into(), + PackageType::Container => "container".into(), + PackageType::Cran => "cran".into(), + PackageType::Debian => "debian".into(), + PackageType::Generic => "generic".into(), + PackageType::Go => "go".into(), + PackageType::Helm => "helm".into(), + PackageType::Maven => "maven".into(), + PackageType::Npm => "npm".into(), + PackageType::Nuget => "nuget".into(), + PackageType::Pub => "pub".into(), + PackageType::PyPi => "pypi".into(), + PackageType::Rpm => "rpm".into(), + PackageType::RubyGems => "rubygems".into(), + PackageType::Swift => "swift".into(), + PackageType::Vagrant => "vagrant".into(), + } + } +}