cpclib_runner/runner/assembler/
mod.rs

1pub mod rasm;
2pub mod sjasmplus;
3pub mod uz80;
4pub mod vasm;
5
6use cpclib_common::event::EventObserver;
7pub use rasm::{RASM_CMD, RasmVersion};
8pub use sjasmplus::{SJASMPLUS_CMD, SjasmplusVersion};
9use uz80::{UZ80_CMD, Uz80Version};
10pub use vasm::{VASM_CMD, VasmVersion};
11
12use crate::delegated::{
13    DelegateApplicationDescription, GithubCompilableApplication, InternetStaticCompiledApplication
14};
15
16#[derive(Clone, Debug, PartialEq, Eq, Hash)]
17pub enum ExternAssembler {
18    Rasm(RasmVersion),
19    Sjasmplus(SjasmplusVersion),
20    Uz80(Uz80Version),
21    Vasm(VasmVersion)
22}
23
24impl ExternAssembler {
25    pub fn get_command(&self) -> &str {
26        match self {
27            ExternAssembler::Rasm(_) => RASM_CMD,
28            ExternAssembler::Vasm(_) => VASM_CMD,
29            ExternAssembler::Uz80(_) => UZ80_CMD,
30            ExternAssembler::Sjasmplus(_) => SJASMPLUS_CMD
31        }
32    }
33
34    pub fn configuration<E: EventObserver>(&self) -> DelegateApplicationDescription<E> {
35        match self {
36            ExternAssembler::Rasm(r) => r.configuration(),
37            ExternAssembler::Sjasmplus(r) => r.configuration(),
38            ExternAssembler::Uz80(u) => u.configuration(),
39            ExternAssembler::Vasm(r) => r.configuration()
40        }
41    }
42}
43#[cfg(test)]
44mod test {
45    use super::RasmVersion;
46    use crate::delegated::{GithubInformation, StaticInformation, cpclib_download};
47    use crate::runner::assembler::{SjasmplusVersion, VasmVersion};
48
49    #[test]
50    fn test_download_rasm() {
51        let urls = RasmVersion::default().github_download_urls().unwrap();
52        assert!(cpclib_download(dbg!(&urls.linux.unwrap())).is_ok());
53        assert!(cpclib_download(dbg!(&urls.windows.unwrap())).is_ok());
54    }
55
56    #[test]
57    fn test_download_sjasmplus() {
58        let urls = SjasmplusVersion::default().github_download_urls().unwrap();
59        assert!(cpclib_download(dbg!(&urls.linux.unwrap())).is_ok());
60        assert!(cpclib_download(dbg!(&urls.windows.unwrap())).is_ok());
61    }
62
63    #[test]
64    fn test_download_vasm() {
65        let urls = VasmVersion::default().static_download_urls();
66        assert!(cpclib_download(dbg!(urls.linux.as_ref().unwrap())).is_ok());
67        assert!(cpclib_download(dbg!(urls.windows.as_ref().unwrap())).is_ok());
68    }
69}