i am writing a program that uses text user interface, and i moved TUI functionality into the separate module, which contains a struct with TUI logic/variables.
So the declaration of struct is :
struct App<'a, T: io::Write>
where
T: io::Write,
{
items_left: StatefulList<String>,
items_right: StatefulList<String>,
input_mode: InputMode,
parser: &'a parser::Parser,
// --- [ Tui Backend ] ---
backend: TermionBackend<T>,
}
and the constructor function implementation is :
impl<'a, T> App<'a, T>
where
T: io::Write,
{
fn new(parser: &'a parser::Parser) -> App<'a, T> {
let stdout = io::stdout().into_raw_mode().unwrap();
let stdout = MouseTerminal::from(stdout);
let stdout = AlternateScreen::from(stdout);
let backend = TermionBackend::new(stdout);
let mut terminal = Terminal::new(backend).unwrap();
let events = Events::new();
App {
items_left: StatefulList::with_items(vec![]),
items_right: StatefulList::with_items(vec![]),
input_mode: InputMode::Normal,
parser,
backend,
}
}
But i got the error from rust-analyzer :
mismatched types expected struct
TermionBackend<T>
found structTermionBackend<AlternateScreen<MouseTerminal<RawTerminal<Stdout>>>>
I want to use generics, because TermionBackend has a lot of nested classes in it, and its declaration is very huge.
Also i find out in sources that AlternateScreen struct, which is T, implements io::Write trait, and that's why i don't understand why the error occurs.