///|
/// Public facade for the MoonPDF library.
///
/// The parser and the renderer live in separate packages so that document
/// inspection tools can use the object model without pulling in the rasterizer.

///|
pub suberror MoonPdfError {
  MoonPdfError(String)
}

///|
pub fn page_count(data : Bytes) -> Int32 raise MoonPdfError {
  let document = @pdf.parse_document(data) catch {
    @pdf.PdfError(msg) => raise MoonPdfError(msg)
  }
  document.page_count()
}

///|
pub fn render_page_png(
  data : Bytes,
  page_index : Int32,
  scale : Double,
) -> Bytes raise MoonPdfError {
  let document = @pdf.parse_document(data) catch {
    @pdf.PdfError(msg) => raise MoonPdfError(msg)
  }
  let page = match document.page(page_index) {
    Some(p) => p
    None => raise MoonPdfError("page index out of range")
  }
  let options = @render.RenderOptions::with_scale(scale)
  let raster = @render.render_page(page, options) catch {
    _ => raise MoonPdfError("failed to render page")
  }
  @render.encode_png(raster)
}