#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(docsrs, feature(doc_cfg))]
extern crate alloc;
pub mod core;
pub mod cpu;
pub mod dev;
pub mod host;
pub mod machine;
#[cfg(feature = "wasm")]
#[cfg_attr(docsrs, doc(cfg(feature = "wasm")))]
pub mod wasm;
pub use crate::core::{Error, Result};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub fn build_info() -> alloc::string::String {
use alloc::string::String;
use alloc::vec::Vec;
let mut features: Vec<&str> = Vec::new();
if cfg!(feature = "std") {
features.push("std");
}
if cfg!(feature = "cli") {
features.push("cli");
}
if cfg!(feature = "wasm") {
features.push("wasm");
}
if cfg!(feature = "cpu-mos6502") {
features.push("cpu-mos6502");
}
if cfg!(feature = "dev-nes-cart") {
features.push("dev-nes-cart");
}
if cfg!(feature = "dev-nes-ppu") {
features.push("dev-nes-ppu");
}
if cfg!(feature = "dev-nes-apu") {
features.push("dev-nes-apu");
}
if cfg!(feature = "machine-nes") {
features.push("machine-nes");
}
if cfg!(feature = "dev-apple1") {
features.push("dev-apple1");
}
if cfg!(feature = "machine-apple1") {
features.push("machine-apple1");
}
let mut s = String::from("rsemu ");
s.push_str(VERSION);
s.push_str(" [");
s.push_str(&features.join(", "));
s.push(']');
s
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version_is_not_empty() {
assert!(!VERSION.is_empty());
}
#[test]
fn build_info_names_the_crate_and_its_features() {
let info = build_info();
assert!(info.starts_with("rsemu "));
assert!(info.contains(VERSION));
#[cfg(feature = "std")]
assert!(info.contains("std"));
}
}