pub mod error;
#[cfg(feature = "rasterize")]
pub mod rasterize;
pub mod svg;
pub use error::RenderError;
#[cfg(feature = "rasterize")]
pub use rasterize::{init_font_database, svg_to_png};
pub use svg::element_to_svg;
#[cfg(feature = "rasterize")]
use chartml_core::ChartML;
#[cfg(feature = "rasterize")]
const DEFAULT_PADDING: u32 = 16;
#[cfg(feature = "rasterize")]
const WHITE: [u8; 3] = [255, 255, 255];
#[cfg(feature = "rasterize")]
pub fn render_to_png(
chartml: &ChartML,
yaml: &str,
width: u32,
height: u32,
density: u32,
) -> Result<Vec<u8>, RenderError> {
let element = chartml.render_from_yaml_with_size(
yaml,
Some(width as f64),
Some(height as f64),
)?;
let svg_str = element_to_svg(&element, width as f64, height as f64);
svg_to_png(&svg_str, width, height, density, DEFAULT_PADDING, WHITE)
}
#[cfg(feature = "rasterize")]
pub async fn render_to_png_async(
chartml: &ChartML,
yaml: &str,
width: u32,
height: u32,
density: u32,
) -> Result<Vec<u8>, RenderError> {
let element = chartml.render_from_yaml_with_params_async(
yaml,
Some(width as f64),
Some(height as f64),
None,
).await?;
let svg_str = element_to_svg(&element, width as f64, height as f64);
svg_to_png(&svg_str, width, height, density, DEFAULT_PADDING, WHITE)
}
#[cfg(feature = "rasterize")]
pub fn element_to_png(
element: &chartml_core::ChartElement,
width: u32,
height: u32,
density: u32,
) -> Result<Vec<u8>, RenderError> {
let svg_str = element_to_svg(element, width as f64, height as f64);
svg_to_png(&svg_str, width, height, density, DEFAULT_PADDING, WHITE)
}