#![deny(
// missing_docs,
missing_debug_implementations,
missing_copy_implementations,
trivial_casts,
trivial_numeric_casts,
unsafe_code,
unstable_features,
unused_import_braces,
unused_qualifications
)]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SiteLink {
badges: Vec<String>,
site: String,
title: String,
}
impl SiteLink {
pub fn new<S: Into<String>>(site: S, title: S, badges: Vec<String>) -> SiteLink {
let mut ret = Self {
badges,
site: site.into(),
title: title.into(),
};
ret.badges.sort(); ret
}
pub fn site(&self) -> &String {
&self.site
}
pub fn title(&self) -> &String {
&self.title
}
pub fn badges(&self) -> &Vec<String> {
&self.badges
}
}
impl PartialEq for SiteLink {
fn eq(&self, other: &SiteLink) -> bool {
self.site == other.site && self.title == other.title && self.badges == other.badges
}
}
impl Eq for SiteLink {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sitelink() {
let s = SiteLink::new("foo", "bar", vec!["zab".to_string(), "baz".to_string()]);
assert_eq!(s.site(), "foo");
assert_eq!(s.title(), "bar");
assert_eq!(*s.badges(), vec!["baz", "zab"]); }
}