scraps 2.1.0

Scraps is a portable CLI knowledge hub for managing interconnected Markdown documentation with Wiki-link notation.
use itertools::Itertools;

use std::collections::HashMap;

use scraps_libs::{
    html::{self, EmbedMode},
    model::{base_url::BaseUrl, content::Content, key::ScrapKey, scrap::Scrap},
};

#[derive(Clone)]
pub struct ScrapDetail {
    v: Scrap,
    content: Content,
    commited_ts: Option<i64>,
}

impl ScrapDetail {
    pub fn new(
        scrap: &Scrap,
        commited_ts: &Option<i64>,
        base_url: &BaseUrl,
        scrap_texts: &HashMap<ScrapKey, String>,
    ) -> ScrapDetail {
        let content = html::to_content(scrap.md_text(), base_url, EmbedMode::Expand(scrap_texts));
        ScrapDetail {
            v: scrap.to_owned(),
            content,
            commited_ts: commited_ts.to_owned(),
        }
    }

    pub fn scrap(&self) -> Scrap {
        self.v.clone()
    }

    pub fn commited_ts(&self) -> Option<i64> {
        self.commited_ts
    }

    pub fn content(&self) -> Content {
        self.content.clone()
    }
}

pub struct ScrapDetails(Vec<ScrapDetail>);

impl ScrapDetails {
    pub fn new(scraps: &Vec<ScrapDetail>) -> ScrapDetails {
        ScrapDetails(scraps.to_owned())
    }

    pub fn to_vec(&self) -> Vec<ScrapDetail> {
        self.0.clone()
    }

    pub fn to_scraps(&self) -> Vec<Scrap> {
        self.0
            .clone()
            .into_iter()
            .map(|sc| sc.scrap())
            .collect_vec()
    }

    pub fn len(&self) -> usize {
        self.0.len()
    }
}