umbra/
umbra.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use thiserror::Error;

use crate::terminal::{IEvent, TermError, Terminal};

#[derive(Error, Debug)]
pub enum UError {
    #[error("Terminal: {0}")]
    Terminal(TermError),
}

impl From<TermError> for UError {
    fn from(err: TermError) -> UError {
        UError::Terminal(err)
    }
}

pub type UResult<T> = std::result::Result<T, UError>;

pub struct Umbra {
    term: Terminal,
}

impl Umbra {
    pub fn new() -> UResult<Self> {
        Ok(Self {
            term: Terminal::new()?,
        })
    }

    pub fn init(&mut self) -> UResult<()> {
        Ok(self.term.init()?)
    }

    pub fn read_event(&mut self) -> UResult<IEvent> {
        Ok(self.term.read_event()?)
    }
}