Skip to main content

rs_prom2json/
lib.rs

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}