Skip to main content

rsvg/
session.rs

1//! Tracks metadata for a loading/rendering session.
2
3use std::sync::Arc;
4
5/// Metadata for a loading/rendering session.
6///
7/// When the calling program first uses one of the API entry points (e.g. `Loader::new()`
8/// in the Rust API, or `rsvg_handle_new()` in the C API), there is no context yet where
9/// librsvg's code may start to track things.  This struct provides that context.
10#[derive(Clone)]
11pub struct Session {
12    inner: Arc<SessionInner>,
13}
14
15struct SessionInner {
16    log_enabled: bool,
17}
18
19fn log_enabled_via_env_var() -> bool {
20    ::std::env::var_os("RSVG_LOG").is_some()
21}
22
23impl Default for Session {
24    fn default() -> Self {
25        Self {
26            inner: Arc::new(SessionInner {
27                log_enabled: log_enabled_via_env_var(),
28            }),
29        }
30    }
31}
32
33impl Session {
34    #[cfg(test)]
35    pub fn new_for_test_suite() -> Self {
36        Self {
37            inner: Arc::new(SessionInner { log_enabled: false }),
38        }
39    }
40
41    pub fn log_enabled(&self) -> bool {
42        self.inner.log_enabled
43    }
44}