Skip to main content

ReportFormatter

Struct ReportFormatter 

Source
pub struct ReportFormatter { /* private fields */ }
Expand description

Formats consensus results into ASCII banners and markdown reports.

Generates fixed-width ASCII banners (exactly 52 characters wide per line) and full markdown reports from agent outputs and consensus results. The reporting module is pure string formatting – no async, no I/O.

Implementations§

Source§

impl ReportFormatter

Source

pub fn new() -> Self

Creates a new formatter with default configuration.

Infallible because ReportConfig::default always produces a valid configuration with an 8-byte-or-larger banner width and ASCII agent titles.

Source

pub fn with_config(config: ReportConfig) -> Result<Self, ReportError>

Creates a new formatter with a validated custom configuration.

Re-runs the same ASCII and minimum-width checks as ReportConfig::new_checked, so callers who mutate a ReportConfig after construction (e.g., via default() + field assignment) cannot bypass validation.

§Errors

Returns ReportError::BannerTooSmall if config.banner_width < 8. Returns ReportError::NonAsciiTitle if any agent title contains non-ASCII characters.

§Example
let cfg = ReportConfig::default();
let fmt = ReportFormatter::with_config(cfg).expect("default config is valid");
Source

pub fn format_banner( &self, agents: &[AgentOutput], consensus: &ConsensusResult, ) -> String

Generates the fixed-width ASCII verdict banner with column-aligned agent labels.

Every line is exactly banner_width (52) characters. Agent labels are left-justified to the same width (max_label_len), so verdict suffixes start at the same column for all agents. When content overflows the inner width, the label is ellipsized while the verdict suffix is preserved intact.

Structure:

+==================================================+
|          MAGI SYSTEM -- VERDICT                  |
+==================================================+
|  Melchior (Scientist):  APPROVE (90%)            |
|  Balthasar (Pragmatist): APPROVE (85%)           |
|  Caspar (Critic):        APPROVE (78%)           |
+==================================================+
|  CONSENSUS: GO WITH CAVEATS (2-1)                |
+==================================================+
Source

pub fn format_init_banner( &self, mode: &Mode, model: &str, timeout_secs: u64, ) -> String

Generates the pre-analysis initialization banner.

Shows mode, model, and timeout in a fixed-width ASCII box.

Source

pub fn format_report( &self, agents: &[AgentOutput], consensus: &ConsensusResult, ) -> String

Generates the full markdown report (banner + all sections).

Concatenates sections in order: banner, key findings, dissenting opinion, conditions for approval, recommended actions. Optional sections are omitted entirely when their data is absent.

Trait Implementations§

Source§

impl Default for ReportFormatter

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.