cli-candlestick-chart 0.4.1

A library for displaying candlestick charts right into your terminal.
Documentation
use std::{cell::RefCell, rc::Rc};

use colored::Colorize;

use crate::{chart_data::ChartData, y_axis::YAxis};

pub struct InfoBar {
    pub name: String,
    chart_data: Rc<RefCell<ChartData>>,
}

impl InfoBar {
    pub const HEIGHT: i64 = 2;

    pub fn new(name: String, chart_data: Rc<RefCell<ChartData>>) -> InfoBar {
        InfoBar { name, chart_data }
    }

    pub fn render(&self) -> String {
        let chart_data = self.chart_data.borrow();
        let main_set = chart_data.main_candle_set.clone();
        let visible_set = chart_data.visible_candle_set.clone();

        let candles = visible_set.candles;
        let mut output_str = String::new();

        output_str += "\n";
        output_str += &"".repeat(candles.len() + YAxis::WIDTH as usize);
        output_str += "\n";

        let mut avg_format = format!("{:.2}", main_set.average);
        avg_format = match main_set.last_price {
            lp if lp > main_set.average => avg_format.bold().red(),
            lp if lp < main_set.average => avg_format.bold().green(),
            _ => avg_format.bold().yellow(),
        }
        .to_string();

        let variation_output = if main_set.variation > 0.0 {
            ("", "green")
        } else {
            ("", "red")
        };

        output_str += &format!(
            "{:>width$} | Price: {price} | Highest: {high} | Lowest: {low} | Var.: {var} | Avg.: {avg} │ Cum. Vol: {vol}",
            &self.name,
            width = YAxis::WIDTH as usize + 3,
            high = format!("{:.2}", main_set.max_price).green().bold(),
            low = format!("{:.2}", main_set.min_price).red().bold(),
            var = format!("{} {:>+.2}%", variation_output.0, main_set.variation).color(variation_output.1).bold(),
            avg = avg_format,
            price = format!("{:.2}", main_set.last_price).green().bold(),
            vol = format!("{:.0}", main_set.cumulative_volume).green().bold(),
        );

        output_str
    }
}