1#![doc = include_str!("../README.md")]
2#![deny(
3 clippy::unwrap_used,
4 clippy::expect_used,
5 clippy::print_stdout,
6 clippy::print_stderr
7)]
8#![allow(
9 clippy::multiple_crate_versions,
10 reason = "Dependency graph pulls distinct versions (e.g., yaml-rust2)."
11)]
12#![cfg_attr(
13 test,
14 allow(
15 clippy::unwrap_used,
16 clippy::expect_used,
17 reason = "tests may use unwrap/expect for brevity"
18 )
19)]
20
21use anyhow::Result;
22
23pub mod budget;
24mod debug;
25mod grep;
26mod ingest;
27mod order;
28mod pruner;
29mod serialization;
30mod utils;
31pub use grep::{
32 GrepConfig, GrepPatterns, GrepShow, build_grep_config,
33 build_grep_config_from_patterns, combine_patterns,
34};
35pub use ingest::fileset::{FilesetInput, FilesetInputKind};
36pub use ingest::format::Format;
37pub use order::types::{ArrayBias, ArraySamplerStrategy};
38pub use order::{
39 NodeId, NodeKind, PriorityConfig, PriorityOrder, RankedNode, build_order,
40};
41pub use utils::extensions;
42pub use utils::templates::map_json_template_for_style;
43
44pub use pruner::budget::find_largest_render_under_budgets;
45pub use prunist::{Budget, BudgetKind, Budgets};
46pub use serialization::color::resolve_color_enabled;
47pub use serialization::types::{
48 ColorMode, ColorStrategy, OutputTemplate, RenderConfig, Style,
49};
50
51#[derive(Debug)]
52pub struct RenderOutput {
53 pub text: String,
54 pub warnings: Vec<String>,
55}
56
57#[derive(Copy, Clone, Debug)]
58pub enum TextMode {
59 Plain,
60 CodeLike,
61}
62
63pub enum InputKind {
64 Json(Vec<u8>),
65 Jsonl(Vec<u8>),
66 Yaml(Vec<u8>),
67 Text { bytes: Vec<u8>, mode: TextMode },
68 Fileset(Vec<FilesetInput>),
69}
70
71pub fn headson(
72 input: InputKind,
73 config: &RenderConfig,
74 priority_cfg: &PriorityConfig,
75 grep: &GrepConfig,
76 budgets: Budgets,
77) -> Result<RenderOutput> {
78 let crate::ingest::IngestOutput { arena, warnings } =
79 crate::ingest::ingest_into_arena(input, priority_cfg, grep)?;
80 let mut order_build = order::build_order(&arena, priority_cfg)?;
81 let out = find_largest_render_under_budgets(
82 &mut order_build,
83 config,
84 grep,
85 budgets,
86 );
87 Ok(RenderOutput {
88 text: out,
89 warnings,
90 })
91}