rust-okx 0.6.3

Async Rust client for the OKX v5 REST API
Documentation
use ratatui::prelude::*;
use ratatui::widgets::{Block, Borders, List, ListItem};

use crate::app::App;

pub fn render(f: &mut Frame, area: Rect, app: &App) {
    let title = format!(" WS 实时行情  {} ", app.inst_id);

    let items: Vec<ListItem> = app
        .tickers
        .iter()
        .map(|t| {
            let last: f64 = t.last.as_str().parse().unwrap_or(0.0);
            let open: f64 = t.open24h.as_str().parse().unwrap_or(0.0);
            let price_color = if last >= open {
                Color::Green
            } else {
                Color::Red
            };

            ListItem::new(Line::from(vec![
                Span::styled(
                    format!("{:<16}", t.ts.as_str()),
                    Style::default().fg(Color::DarkGray),
                ),
                Span::raw("last="),
                Span::styled(
                    format!("{:<14}", t.last.as_str()),
                    Style::default().fg(price_color),
                ),
                Span::raw("bid="),
                Span::raw(format!("{:<14}", t.bid_px.as_str())),
                Span::raw("ask="),
                Span::raw(format!("{:<14}", t.ask_px.as_str())),
                Span::styled(
                    format!("vol={}", t.vol24h.as_str()),
                    Style::default().fg(Color::DarkGray),
                ),
            ]))
        })
        .collect();

    let list = List::new(items).block(Block::default().borders(Borders::ALL).title(title));
    f.render_widget(list, area);
}