1use std::any::Any;
2use std::time::SystemTime;
3
4use image::{ColorType, DynamicImage};
5
6use crate::core::{Bios, CoreSettings, Error, MountedFile, Rom, SaveState, SettingId};
7use crate::inputs::gamepad::ButtonSet;
8use crate::inputs::keyboard::ScancodeSet;
9use crate::inputs::{Button, Scancode};
10use crate::Core;
11
12pub struct NullCore;
14
15impl Core for NullCore {
16 fn init(&mut self) -> Result<(), Error> {
17 Ok(())
18 }
19
20 fn name(&self) -> &str {
21 "null"
22 }
23
24 fn reset(&mut self) -> Result<(), Error> {
25 Ok(())
26 }
27
28 fn set_volume(&mut self, _volume: u8) -> Result<(), Error> {
29 Ok(())
30 }
31
32 fn set_rtc(&mut self, _time: SystemTime) -> Result<(), Error> {
33 Ok(())
34 }
35
36 fn screenshot(&self) -> Result<DynamicImage, Error> {
37 Ok(DynamicImage::new(1, 1, ColorType::Rgb8))
38 }
39
40 fn save_state_mut(&mut self, _slot: usize) -> Result<Option<&mut dyn SaveState>, Error> {
41 Ok(None)
42 }
43
44 fn save_state(&self, _slot: usize) -> Result<Option<&dyn SaveState>, Error> {
45 Ok(None)
46 }
47
48 fn mounted_file_mut(&mut self, _slot: usize) -> Result<Option<&mut dyn MountedFile>, Error> {
49 Ok(None)
50 }
51
52 fn send_rom(&mut self, _rom: Rom) -> Result<(), Error> {
53 Ok(())
54 }
55
56 fn send_bios(&mut self, _bios: Bios) -> Result<(), Error> {
57 Ok(())
58 }
59
60 fn key_up(&mut self, _key: Scancode) -> Result<(), Error> {
61 Ok(())
62 }
63
64 fn key_down(&mut self, _key: Scancode) -> Result<(), Error> {
65 Ok(())
66 }
67
68 fn keys_set(&mut self, _keys: ScancodeSet) -> Result<(), Error> {
69 Ok(())
70 }
71
72 fn keys(&self) -> Result<ScancodeSet, Error> {
73 Ok(ScancodeSet::new())
74 }
75
76 fn gamepad_button_up(&mut self, _index: usize, _button: Button) -> Result<(), Error> {
77 Ok(())
78 }
79
80 fn gamepad_button_down(&mut self, _index: usize, _button: Button) -> Result<(), Error> {
81 Ok(())
82 }
83
84 fn gamepad_buttons_set(&mut self, _index: usize, _buttons: ButtonSet) -> Result<(), Error> {
85 Ok(())
86 }
87
88 fn gamepad_buttons(&self, _index: usize) -> Result<Option<ButtonSet>, Error> {
89 Ok(None)
90 }
91
92 fn settings(&self) -> Result<CoreSettings, Error> {
93 Ok(CoreSettings::new("null".to_string(), vec![]))
95 }
96
97 fn trigger(&mut self, _id: SettingId) -> Result<(), Error> {
98 Ok(())
99 }
100
101 fn file_select(&mut self, _id: SettingId, _path: String) -> Result<(), Error> {
102 Ok(())
103 }
104
105 fn int_option(&mut self, _id: SettingId, _value: u32) -> Result<u32, Error> {
106 Ok(0)
107 }
108
109 fn bool_option(&mut self, _id: SettingId, _value: bool) -> Result<bool, Error> {
110 Ok(false)
111 }
112
113 fn as_any(&self) -> &dyn Any {
114 self
115 }
116
117 fn as_any_mut(&mut self) -> &mut dyn Any {
118 self
119 }
120
121 fn quit(&mut self) {}
122
123 fn should_quit(&self) -> bool {
124 false
125 }
126}