Skip to main content

qa_spec/
frontend.rs

1use serde_json::Value;
2
3use crate::{RenderPayload, render_card, render_json_ui, render_text};
4
5/// Abstraction over UI frontends that render the same payload into different transports.
6pub trait QaFrontend {
7    fn render_text_ui(&self, payload: &RenderPayload) -> String;
8    fn render_json_ui(&self, payload: &RenderPayload) -> Value;
9    fn render_adaptive_card(&self, payload: &RenderPayload) -> Value;
10}
11
12/// Default frontend implementation that reuses existing renderer functions.
13#[derive(Debug, Default, Clone, Copy)]
14pub struct DefaultQaFrontend;
15
16impl QaFrontend for DefaultQaFrontend {
17    fn render_text_ui(&self, payload: &RenderPayload) -> String {
18        render_text(payload)
19    }
20
21    fn render_json_ui(&self, payload: &RenderPayload) -> Value {
22        render_json_ui(payload)
23    }
24
25    fn render_adaptive_card(&self, payload: &RenderPayload) -> Value {
26        render_card(payload)
27    }
28}