adf2html/nodes/block/table/
table_row.rs1use serde::{Deserialize, Serialize};
2
3use super::table_cell::TableCell;
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct TableRow {
8 pub content: Vec<Content>,
9}
10
11#[derive(Clone, Debug, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase", tag = "type")]
13pub enum Content {
14 TableHeader(TableCell),
15 TableCell(TableCell),
16}
17
18impl TableRow {
19 pub(crate) fn to_html(&self, row_number: Option<u32>, issue_or_comment_link: &str) -> String {
20 let mut html = String::from("<tr>");
21
22 if let Some(i) = row_number {
23 html.push_str(&format!(r#"<th style = "background-color: #F1F2F4;">{i}</th>"#));
24 }
25
26 for cell in &self.content {
27 match cell {
28 Content::TableHeader(table_cell) => html.push_str(&table_cell.to_html(true, issue_or_comment_link)),
29 Content::TableCell(table_cell) => html.push_str(&table_cell.to_html(false, issue_or_comment_link)),
30 };
31 }
32
33 html.push_str("</tr>");
34
35 html
36 }
37
38 pub(crate) fn col_widths(&self) -> Vec<u32> {
39 let mut widths = Vec::new();
40 for cell in &self.content {
41 let cw = match cell {
42 Content::TableHeader(c) => c.col_widths(),
43 Content::TableCell(c) => c.col_widths(),
44 };
45 if let Some(w) = cw {
46 widths.extend_from_slice(w);
47 }
48 }
49 widths
50 }
51
52 pub(crate) fn replace_media_urls(&mut self, urls: &mut Vec<String>) {
53 for content in self.content.iter_mut() {
54 match content {
55 Content::TableHeader(cell) => cell.replace_media_urls(urls),
56 Content::TableCell(cell) => cell.replace_media_urls(urls),
57 }
58 }
59 }
60}