///|
fn pdf_read_reconstructed_after_stream_parse_error(
  data : BytesView,
  error : @core.PdfError,
) -> PdfDocument raise @core.PdfError {
  if pdf_reader_startxref_has_xref_stream_prefix_or_false(data) {
    pdf_read_reconstructed_or_raise(
      data,
      error,
      include_xref_stream_trailers=true,
    )
  } else {
    pdf_read_reconstructed_or_raise(data, error)
  }
}

///|
fn pdf_read_reconstructed_after_xref_entry_error(
  data : BytesView,
) -> PdfDocument raise @core.PdfError {
  if pdf_reader_xref_entry_error_from_metadata(data) {
    pdf_read_reconstructed_or_raise(
      data,
      XRefEntryExpected,
      include_xref_stream_trailers=true,
    )
  } else if pdf_reader_startxref_root_uses_object_stream_or_false(data) {
    if pdf_reader_startxref_object_stream_root_unusable_or_true(data) {
      raise XRefEntryExpected
    } else {
      pdf_read_reconstructed_or_raise(
        data,
        XRefEntryExpected,
        include_xref_stream_trailers=true,
      )
    }
  } else {
    pdf_read_reconstructed_or_raise(data, XRefEntryExpected)
  }
}

///|
fn pdf_read_reconstructed_after_root_error(
  data : BytesView,
) -> PdfDocument raise @core.PdfError {
  if pdf_reader_startxref_uses_xref_stream_or_false(data) {
    pdf_read_reconstructed_or_raise(
      data,
      RootExpected,
      include_xref_stream_trailers=true,
    )
  } else {
    pdf_read_reconstructed_or_raise(data, RootExpected)
  }
}

///|
fn pdf_read_reconstructed_after_stream_data_error(
  data : BytesView,
) -> PdfDocument raise @core.PdfError {
  if pdf_reader_startxref_root_uses_object_stream_or_false(data) {
    pdf_read_reconstructed_or_raise(
      data,
      StreamDataExpected,
      include_xref_stream_trailers=true,
    )
  } else {
    raise StreamDataExpected
  }
}

///|
fn pdf_read_reconstructed_after_metadata_decode_error(
  data : BytesView,
  error : @core.PdfError,
) -> PdfDocument raise @core.PdfError {
  if pdf_reader_xref_metadata_error_allows_reconstruction(data, error) ||
    pdf_reader_object_stream_error_allows_reconstruction(data) {
    pdf_read_reconstructed_or_raise(
      data,
      error,
      include_xref_stream_trailers=true,
    )
  } else {
    raise error
  }
}