use ratatui::{ buffer::Buffer, layout::Rect, style::Stylize, text::Line, widgets::{Block, Borders, List, ListItem, Padding, Widget}, }; use super::Peers; #[derive(Debug, Clone)] pub struct PeersWidget<'p> { pub peers: &'p Peers, } impl<'p> Widget for PeersWidget<'p> { fn render(self, area: Rect, buf: &mut Buffer) where Self: Sized, { let mut items = Vec::with_capacity(self.peers.len()); for (k, v) in self.peers.iter() { let item = format!("{:?}: {} ({})", k, v.0, v.1); let s = Line::from(item.yellow()); let item = ListItem::new(s); items.push(item); } let title = Line::from(" Peers ".bold()).centered(); let block = Block::default() .title(title) .borders(Borders::all()) .padding(Padding::uniform(1)); let list = List::new(items).block(block); list.render(area, buf); } } #[derive(Debug, Clone)] pub struct NetworkInfoWidget; impl Widget for NetworkInfoWidget { fn render(self, area: Rect, buf: &mut Buffer) where Self: Sized, { let udp: Line = format!("UDP socket:\t\t\t {:?}", joecalsend::LISTENING_SOCKET_ADDR) .yellow() .into(); let multicast: Line = format!( "Multicast address:\t\t {:?}:{}", joecalsend::MULTICAST_IP, joecalsend::DEFAULT_PORT ) .yellow() .into(); let http: Line = format!( "HTTP address:\t\t\t {:?}", joecalsend::LISTENING_SOCKET_ADDR ) .yellow() .into(); let items = [ ListItem::new(udp), ListItem::new(multicast), ListItem::new(http), ]; let title = Line::from(" Listeners ".bold()).centered(); let block = Block::default() .title(title) .borders(Borders::all()) .padding(Padding::uniform(1)); let list = List::new(items).block(block); list.render(area, buf); } }