///|
fn PdfDocument::pdf_bookmark_import_target_object(
  self : PdfDocument,
  page_number : Int,
  object : @syntax.PdfObject,
) -> @destination.PdfDestination raise @core.PdfError {
  match object {
    PdfArray([PdfInteger(_), .. rest]) =>
      match self.page_object_number(page_number) {
        Some(page_object_number) =>
          self.read_destination(
            PdfArray([PdfIndirect(page_object_number), ..rest]),
          )
        None => raise SoftError("bookmark_of_data: page obj num not found")
      }
    PdfNull => DestNull
    PdfString(name) => DestString(name)
    _ => DestAction(object)
  }
}

///|
fn PdfDocument::pdf_bookmark_import_target(
  self : PdfDocument,
  page_number : Int,
  destination : @core.PdfBytes?,
) -> @destination.PdfDestination raise @core.PdfError {
  match destination {
    Some(data) =>
      self.pdf_bookmark_import_target_object(
        page_number,
        @syntax.pdf_parse_object_from_view(data),
      )
    None => self.target_of_page_number(page_number)
  }
}

///|
fn PdfDocument::pdf_bookmark_import_bookmark(
  self : PdfDocument,
  level : Int,
  title : BytesView,
  page_number : Int,
  is_open : Bool,
  destination : @core.PdfBytes?,
) -> @bookmark.PdfBookmark raise @core.PdfError {
  {
    level,
    text: pdf_pdfdocstring_of_utf8(pdf_bookmark_import_fixup_text(title)),
    target: self.pdf_bookmark_import_target(page_number, destination),
    is_open,
    colour: @bookmark.pdf_bookmark_black,
    flags: 0,
  }
}