manabrew_engine/
game_log.rs1use crate::game_log_entry::GameLogEntry;
2use crate::game_log_entry_type::GameLogEntryType;
3use crate::game_log_formatter::{ConsoleGameLogFormatter, GameLogFormatter};
4
5pub struct GameLog {
8 enabled: bool,
9 formatter: Box<dyn GameLogFormatter>,
10}
11
12impl Default for GameLog {
13 fn default() -> Self {
14 Self::new()
15 }
16}
17
18impl GameLog {
19 pub fn new() -> Self {
20 Self {
21 enabled: Self::enabled_from_env(),
22 formatter: Box::new(ConsoleGameLogFormatter),
23 }
24 }
25
26 pub fn with_enabled(mut self, enabled: bool) -> Self {
27 self.enabled = enabled;
28 self
29 }
30
31 pub fn set_enabled(&mut self, enabled: bool) {
32 self.enabled = enabled;
33 }
34
35 pub fn enabled(&self) -> bool {
36 self.enabled
37 }
38
39 pub fn log(&self, entry_type: GameLogEntryType, indent: usize, message: impl Into<String>) {
40 if !self.enabled {
41 return;
42 }
43 let entry = GameLogEntry::new(entry_type, indent, message);
44 eprintln!("{}", self.formatter.format(&entry));
45 }
46
47 fn enabled_from_env() -> bool {
48 match std::env::var("manabrew_engine_GAME_LOG") {
49 Ok(value) => {
50 let v = value.trim().to_ascii_lowercase();
51 !(v == "0" || v == "false" || v == "off")
52 }
53 Err(_) => false,
54 }
55 }
56}