#![forbid(unsafe_code)]
use bubbles::spinner::{SpinnerModel, spinners};
use bubbletea::{Cmd, KeyMsg, KeyType, Message, Model, Program, quit};
use lipgloss::Style;
#[derive(bubbletea::Model)]
struct App {
spinner: SpinnerModel,
loading: bool,
}
impl App {
fn new() -> Self {
let style = Style::new().foreground("212");
let spinner = SpinnerModel::with_spinner(spinners::dot()).style(style);
Self {
spinner,
loading: true,
}
}
fn init(&self) -> Option<Cmd> {
self.spinner.init()
}
fn update(&mut self, msg: Message) -> Option<Cmd> {
if let Some(key) = msg.downcast_ref::<KeyMsg>() {
match key.key_type {
KeyType::Runes => {
if let Some(&('q' | 'Q')) = key.runes.first() {
return Some(quit());
}
}
KeyType::CtrlC | KeyType::Esc => return Some(quit()),
_ => {}
}
}
self.spinner.update(msg)
}
fn view(&self) -> String {
if self.loading {
format!(
"{} Loading... please wait\n\nPress q to quit.",
self.spinner.view()
)
} else {
"Done!".to_string()
}
}
}
fn main() -> Result<(), bubbletea::Error> {
let model = App::new();
Program::new(model).run()?;
Ok(())
}