aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/composer.rs
blob: d5a9997b2c1ab069cae87098d924ac83734a24a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//! ref: composer/src/Composer/Composer.php

use shirabe_external_packages::composer::pcre::preg::Preg;

use crate::autoload::autoload_generator::AutoloadGenerator;
use crate::downloader::download_manager::DownloadManager;
use crate::package::archiver::archive_manager::ArchiveManager;
use crate::package::locker::Locker;
use crate::partial_composer::PartialComposer;
use crate::plugin::plugin_manager::PluginManager;

#[derive(Debug)]
pub struct Composer {
    inner: PartialComposer,
    locker: Option<Locker>,
    download_manager: Option<std::rc::Rc<std::cell::RefCell<DownloadManager>>>,
    // TODO(plugin): plugin_manager is part of the plugin API
    plugin_manager: Option<Box<PluginManager>>,
    autoload_generator: Option<AutoloadGenerator>,
    archive_manager: Option<ArchiveManager>,
}

impl Composer {
    // TODO: change this information to Shirabe version.
    pub const VERSION: &'static str = "2.9.7";
    pub const BRANCH_ALIAS_VERSION: &'static str = "";
    pub const RELEASE_DATE: &'static str = "2026-04-14 13:31:52";
    pub const SOURCE_VERSION: &'static str = "";
    pub const RUNTIME_API_VERSION: &'static str = "2.2.2";

    pub fn get_version() -> String {
        if Self::VERSION == "@package_version@" {
            return Self::SOURCE_VERSION.to_string();
        }
        if Self::BRANCH_ALIAS_VERSION != ""
            && Preg::is_match("{^[a-f0-9]{40}$}", Self::VERSION).unwrap_or(false)
        {
            return format!("{}+{}", Self::BRANCH_ALIAS_VERSION, Self::VERSION);
        }
        Self::VERSION.to_string()
    }

    pub fn set_locker(&mut self, locker: Locker) {
        self.locker = Some(locker);
    }

    pub fn get_locker(&self) -> &Locker {
        self.locker.as_ref().unwrap()
    }

    pub fn set_download_manager(
        &mut self,
        manager: std::rc::Rc<std::cell::RefCell<DownloadManager>>,
    ) {
        self.download_manager = Some(manager);
    }

    pub fn get_download_manager(&self) -> &std::rc::Rc<std::cell::RefCell<DownloadManager>> {
        self.download_manager.as_ref().unwrap()
    }

    pub fn set_archive_manager(&mut self, manager: ArchiveManager) {
        self.archive_manager = Some(manager);
    }

    pub fn get_archive_manager(&self) -> &ArchiveManager {
        self.archive_manager.as_ref().unwrap()
    }

    // TODO(plugin): set_plugin_manager is part of the plugin API
    pub fn set_plugin_manager(&mut self, manager: PluginManager) {
        self.plugin_manager = Some(Box::new(manager));
    }

    // TODO(plugin): get_plugin_manager is part of the plugin API
    pub fn get_plugin_manager(&self) -> &PluginManager {
        self.plugin_manager.as_ref().unwrap()
    }

    pub fn set_autoload_generator(&mut self, autoload_generator: AutoloadGenerator) {
        self.autoload_generator = Some(autoload_generator);
    }

    pub fn get_autoload_generator(&self) -> &AutoloadGenerator {
        self.autoload_generator.as_ref().unwrap()
    }

    pub fn get_package(&self) -> &dyn crate::package::root_package_interface::RootPackageInterface {
        self.inner.get_package()
    }

    pub fn get_config(&self) -> &crate::config::Config {
        self.inner.get_config()
    }

    pub fn get_repository_manager(
        &self,
    ) -> &crate::repository::repository_manager::RepositoryManager {
        self.inner.get_repository_manager()
    }

    pub fn get_event_dispatcher(
        &self,
    ) -> &crate::event_dispatcher::event_dispatcher::EventDispatcher {
        self.inner.get_event_dispatcher()
    }

    pub fn get_installation_manager(
        &self,
    ) -> &crate::installer::installation_manager::InstallationManager {
        self.inner.get_installation_manager()
    }

    pub fn get_loop(&self) -> &std::rc::Rc<std::cell::RefCell<crate::util::r#loop::Loop>> {
        self.inner.get_loop()
    }

    pub fn is_global(&self) -> bool {
        self.inner.is_global()
    }
}