bfree 0.1.19

bfree - memory stats for humans
Documentation
use crate::cli::Args;
use crate::core::memory_stats::MemoryStats;
use crate::render::structured::{self, StructuredFormat, StructuredView};
use crate::render::views::{CompactView, ExtendedView, PrettyView};
use crate::render::Renderer;

pub enum OutputMode {
    Compact,
    Extended,
    Pretty,
    Json(StructuredView),
    Yaml(StructuredView),
}

impl OutputMode {
    pub fn from_args(args: &Args) -> Self {
        let view = if args.extended { StructuredView::Extended } else { StructuredView::Compact };
        if args.json {
            Self::Json(view)
        } else if args.yaml {
            Self::Yaml(view)
        } else if args.pretty {
            Self::Pretty
        } else if args.extended {
            Self::Extended
        } else {
            Self::Compact
        }
    }

    pub fn render(self, stats: &MemoryStats) -> Result<String, String> {
        match self {
            Self::Compact  => Ok(CompactView.render(stats)),
            Self::Extended => Ok(ExtendedView.render(stats)),
            Self::Pretty   => Ok(PrettyView.render(stats)),
            Self::Json(view) => structured::render(stats, StructuredFormat::Json, view),
            Self::Yaml(view) => structured::render(stats, StructuredFormat::Yaml, view),
        }
    }
}