From ddb8dbcc24cbe3439e9157e7745251b09fb305a5 Mon Sep 17 00:00:00 2001 From: James Norcutt Date: Sat, 21 Mar 2026 17:25:09 +0000 Subject: [PATCH] getting there --- Cargo.lock | 13 +++++++++++++ Cargo.toml | 2 +- src/app.rs | 34 +++++++++++++++++++++++++++++++--- src/crossterm.rs | 8 ++++++-- src/main.rs | 4 ++-- 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7c5971..1af840b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,6 +170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", + "clap_derive", ] [[package]] @@ -184,6 +185,18 @@ dependencies = [ "strsim", ] +[[package]] +name = "clap_derive" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "clap_lex" version = "1.1.0" diff --git a/Cargo.toml b/Cargo.toml index 26fdbb4..9b16967 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,5 @@ edition = "2024" [dependencies] ratatui = "0.30.0" crossterm = "0.29.0" -clap = "4.6.0" +clap = { version = "4.6.0", features = ["derive"] } serde_json = "1.0.149" diff --git a/src/app.rs b/src/app.rs index 9b4eec6..4dbee57 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,3 @@ -use std::collections::HashMap; pub struct TabsState<'a> { pub titles: Vec<&'a str>, @@ -21,8 +20,37 @@ impl<'a> TabsState<'a> { } } } +pub struct Servers<'a> { + pub servers: Vec>, + pub index: usize, +} -pub struct App { +impl<'a> Servers<'a> { + pub const fn new( servers: Vec>) -> Self { + Self { servers, index: 0 } + } + + pub fn next(&mut self) { + self.index = (self.index + 1) % self.servers.len(); + } + + pub fn previous(&mut self) { + if self.index > 0 { + self.index -= 1; + } else { + self.index = self.servers.len() - 1; + } + } +} + +pub struct Server<'a> { + pub name: &'a str, + pub location: &'a str, + pub ip: &'a str, + pub connected: bool, +} + +pub struct App<'a> { pub title: &'a str, pub should_quit: bool, pub tabs: TabsState<'a>, @@ -30,7 +58,7 @@ pub struct App { pub enhanced_graphics: bool, } -impl App { +impl<'a> App<'a> { pub fn new(title: &'a str, servers: Vec>, enhanced_graphics: bool) -> Self { App { title, diff --git a/src/crossterm.rs b/src/crossterm.rs index a9accb6..9301987 100644 --- a/src/crossterm.rs +++ b/src/crossterm.rs @@ -10,7 +10,7 @@ use crossterm::terminal::{ use ratatui::backend::{Backend, CrosstermBackend}; use ratatui::Terminal; -use crate::app::App; +use crate::app::{App, Server}; use crate::ui; pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box> { @@ -22,7 +22,7 @@ pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box() -> Vec> { + //todo: add printer ip addrs +} diff --git a/src/main.rs b/src/main.rs index c3c26f1..634764b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ use crate::{ }; -#[derive(Debug, Parser)] +#[derive(Parser)] struct Cli { /// time in ms between two ticks. #[arg(short, long, default_value_t = 200)] @@ -23,7 +23,7 @@ struct Cli { } fn main() -> Result<(), Box> { - let cli = Cli::Parse(); + let cli = Cli::parse(); let tick_rate = Duration::from_millis(cli.tick_rate); crate::crossterm::run(tick_rate, cli.unicode)?; Ok(())