aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/package/complete_package.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-16 00:38:06 +0900
committernsfisis <nsfisis@gmail.com>2026-05-16 10:00:40 +0900
commitb0b97e85720d62eb21fc63f986a5de40c796c869 (patch)
tree57425aa119059bad6fbfecf54e71dd2af7a1f2e1 /crates/shirabe/src/package/complete_package.rs
parentaa9228710e497f3947d4f7309128d08e0bf9d257 (diff)
downloadphp-shirabe-b0b97e85720d62eb21fc63f986a5de40c796c869.tar.gz
php-shirabe-b0b97e85720d62eb21fc63f986a5de40c796c869.tar.zst
php-shirabe-b0b97e85720d62eb21fc63f986a5de40c796c869.zip
feat(port): port CompletePackage.php
Diffstat (limited to 'crates/shirabe/src/package/complete_package.rs')
-rw-r--r--crates/shirabe/src/package/complete_package.rs131
1 files changed, 131 insertions, 0 deletions
diff --git a/crates/shirabe/src/package/complete_package.rs b/crates/shirabe/src/package/complete_package.rs
index be94b56..2120eec 100644
--- a/crates/shirabe/src/package/complete_package.rs
+++ b/crates/shirabe/src/package/complete_package.rs
@@ -1 +1,132 @@
//! ref: composer/src/Composer/Package/CompletePackage.php
+
+use indexmap::IndexMap;
+use shirabe_php_shim::PhpMixed;
+use crate::package::complete_package_interface::CompletePackageInterface;
+use crate::package::package::Package;
+
+#[derive(Debug)]
+pub struct CompletePackage {
+ pub(crate) inner: Package,
+ pub(crate) repositories: Vec<IndexMap<String, PhpMixed>>,
+ pub(crate) license: Vec<String>,
+ pub(crate) keywords: Vec<String>,
+ pub(crate) authors: Vec<IndexMap<String, String>>,
+ pub(crate) description: Option<String>,
+ pub(crate) homepage: Option<String>,
+ pub(crate) scripts: IndexMap<String, Vec<String>>,
+ pub(crate) support: IndexMap<String, String>,
+ pub(crate) funding: Vec<IndexMap<String, PhpMixed>>,
+ pub(crate) abandoned: PhpMixed,
+ pub(crate) archive_name: Option<String>,
+ pub(crate) archive_excludes: Vec<String>,
+}
+
+impl CompletePackageInterface for CompletePackage {
+ fn set_scripts(&mut self, scripts: IndexMap<String, Vec<String>>) {
+ self.scripts = scripts;
+ }
+
+ fn get_scripts(&self) -> IndexMap<String, Vec<String>> {
+ self.scripts.clone()
+ }
+
+ fn set_repositories(&mut self, repositories: Vec<IndexMap<String, PhpMixed>>) {
+ self.repositories = repositories;
+ }
+
+ fn get_repositories(&self) -> Vec<IndexMap<String, PhpMixed>> {
+ self.repositories.clone()
+ }
+
+ fn set_license(&mut self, license: Vec<String>) {
+ self.license = license;
+ }
+
+ fn get_license(&self) -> Vec<String> {
+ self.license.clone()
+ }
+
+ fn set_keywords(&mut self, keywords: Vec<String>) {
+ self.keywords = keywords;
+ }
+
+ fn get_keywords(&self) -> Vec<String> {
+ self.keywords.clone()
+ }
+
+ fn set_authors(&mut self, authors: Vec<IndexMap<String, String>>) {
+ self.authors = authors;
+ }
+
+ fn get_authors(&self) -> Vec<IndexMap<String, String>> {
+ self.authors.clone()
+ }
+
+ fn set_description(&mut self, description: String) {
+ self.description = Some(description);
+ }
+
+ fn get_description(&self) -> Option<&str> {
+ self.description.as_deref()
+ }
+
+ fn set_homepage(&mut self, homepage: String) {
+ self.homepage = Some(homepage);
+ }
+
+ fn get_homepage(&self) -> Option<&str> {
+ self.homepage.as_deref()
+ }
+
+ fn set_support(&mut self, support: IndexMap<String, String>) {
+ self.support = support;
+ }
+
+ fn get_support(&self) -> IndexMap<String, String> {
+ self.support.clone()
+ }
+
+ fn set_funding(&mut self, funding: Vec<IndexMap<String, PhpMixed>>) {
+ self.funding = funding;
+ }
+
+ fn get_funding(&self) -> Vec<IndexMap<String, PhpMixed>> {
+ self.funding.clone()
+ }
+
+ fn is_abandoned(&self) -> bool {
+ match &self.abandoned {
+ PhpMixed::Bool(b) => *b,
+ PhpMixed::String(s) => !s.is_empty(),
+ _ => false,
+ }
+ }
+
+ fn set_abandoned(&mut self, abandoned: PhpMixed) {
+ self.abandoned = abandoned;
+ }
+
+ fn get_replacement_package(&self) -> Option<&str> {
+ match &self.abandoned {
+ PhpMixed::String(s) => Some(s.as_str()),
+ _ => None,
+ }
+ }
+
+ fn set_archive_name(&mut self, name: String) {
+ self.archive_name = Some(name);
+ }
+
+ fn get_archive_name(&self) -> Option<&str> {
+ self.archive_name.as_deref()
+ }
+
+ fn set_archive_excludes(&mut self, excludes: Vec<String>) {
+ self.archive_excludes = excludes;
+ }
+
+ fn get_archive_excludes(&self) -> Vec<String> {
+ self.archive_excludes.clone()
+ }
+}