use serde::{Deserialize, Serialize};
pub trait Referable {
fn index(&self) -> usize;
fn url(&self) -> &str;
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Reference {
pub index: usize,
pub url: String,
}
impl Referable for Reference {
fn index(&self) -> usize {
self.index
}
fn url(&self) -> &str {
&self.url
}
}
pub fn render_block<T: Referable>(references: &[T]) -> String {
if references.is_empty() {
return String::new();
}
let mut s = String::from("References:\n");
for r in references {
s.push_str(&format!("[{}] {}\n", r.index(), r.url()));
}
s.truncate(s.trim_end().len());
s
}