1use std::io;
2
3use std::io::Write;
4
5use prometheus_parse::Scrape;
6use serde_json::to_writer;
7
8mod json_models;
9use json_models::PrometheusJson;
10use json_models::SampleJson;
11
12pub fn parse<I>(prom_lines: I) -> Result<Scrape, io::Error>
13where
14 I: Iterator<Item = Result<String, io::Error>>,
15{
16 Scrape::parse(prom_lines)
17}
18
19pub fn scrape2writer<W>(s: &Scrape, wtr: W) -> Result<(), io::Error>
20where
21 W: Write,
22{
23 let samples = s.samples.iter().map(SampleJson::from).collect();
24 let prom_json = PrometheusJson {
25 docs: &s.docs,
26 samples,
27 };
28 to_writer(wtr, &prom_json).map_err(io::Error::from)
29}
30
31pub fn docs2writer<W>(s: &Scrape, wtr: W) -> Result<(), io::Error>
32where
33 W: Write,
34{
35 to_writer(wtr, &s.docs).map_err(io::Error::from)
36}
37
38pub fn samples2writer<W>(s: &Scrape, wtr: W) -> Result<(), io::Error>
39where
40 W: Write,
41{
42 let samples: Vec<SampleJson> = s.samples.iter().map(SampleJson::from).collect();
43 to_writer(wtr, &samples).map_err(io::Error::from)
44}