use std::collections::HashMap;
use scraps_libs::model::{base_url::BaseUrl, content::Content, key::ScrapKey, scrap::Scrap};
use crate::error::ScrapsResult;
use crate::usecase::build::model::{
backlinks_map::BacklinksMap, css::CssMetadata, html::HtmlMetadata,
list_view_configs::ListViewConfigs, scrap_detail::ScrapDetails, site_nav::SiteNav,
};
pub trait HtmlIndexRenderer {
fn render_index(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
list_view_configs: &ListViewConfigs,
scrap_details: &ScrapDetails,
backlinks_map: &BacklinksMap,
site_nav: &SiteNav,
) -> ScrapsResult<usize>;
}
pub trait HtmlAboutRenderer {
fn render_about(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
readme_content: &Content,
backlinks_map: &BacklinksMap,
site_nav: &SiteNav,
) -> ScrapsResult<()>;
}
pub trait HtmlScrapRenderer {
fn render_scraps(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
scrap_details: &ScrapDetails,
backlinks_map: &BacklinksMap,
scraps_by_key: &HashMap<ScrapKey, &Scrap>,
site_nav: &SiteNav,
) -> ScrapsResult<()>;
}
pub trait HtmlScrapsIndexRenderer {
fn render_scraps_index(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
scrap_details: &ScrapDetails,
backlinks_map: &BacklinksMap,
site_nav: &SiteNav,
) -> ScrapsResult<()>;
}
pub trait HtmlTagsIndexRenderer {
fn render_tags_index(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
scraps: &[Scrap],
backlinks_map: &BacklinksMap,
site_nav: &SiteNav,
) -> ScrapsResult<()>;
}
pub trait HtmlTagRenderer {
fn render_tags(
&self,
base_url: &BaseUrl,
html_metadata: &HtmlMetadata,
backlinks_map: &BacklinksMap,
site_nav: &SiteNav,
) -> ScrapsResult<()>;
}
pub trait CssRenderer {
fn render_css(&self, css_metadata: &CssMetadata) -> ScrapsResult<()>;
}
pub trait FontsRenderer {
fn render_fonts(&self) -> ScrapsResult<()>;
}
pub trait JsRenderer {
fn render_js(&self) -> ScrapsResult<()>;
}
pub trait SearchIndexJsonRenderer {
fn render_search_index(&self, base_url: &BaseUrl, scraps: &[Scrap]) -> ScrapsResult<()>;
}
pub trait BuildRenderer:
HtmlIndexRenderer
+ HtmlAboutRenderer
+ HtmlScrapRenderer
+ HtmlScrapsIndexRenderer
+ HtmlTagsIndexRenderer
+ HtmlTagRenderer
+ CssRenderer
+ FontsRenderer
+ JsRenderer
+ SearchIndexJsonRenderer
+ Sync
{
}
impl<T> BuildRenderer for T where
T: HtmlIndexRenderer
+ HtmlAboutRenderer
+ HtmlScrapRenderer
+ HtmlScrapsIndexRenderer
+ HtmlTagsIndexRenderer
+ HtmlTagRenderer
+ CssRenderer
+ FontsRenderer
+ JsRenderer
+ SearchIndexJsonRenderer
+ Sync
{
}
#[cfg(test)]
pub mod tests {
use super::*;
pub struct BuildRendererTest();
impl BuildRendererTest {
pub fn new() -> Self {
Self()
}
}
impl HtmlIndexRenderer for BuildRendererTest {
fn render_index(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_list_view_configs: &ListViewConfigs,
_scrap_details: &ScrapDetails,
_backlinks_map: &BacklinksMap,
_site_nav: &SiteNav,
) -> ScrapsResult<usize> {
Ok(1)
}
}
impl HtmlAboutRenderer for BuildRendererTest {
fn render_about(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_readme_content: &Content,
_backlinks_map: &BacklinksMap,
_site_nav: &SiteNav,
) -> ScrapsResult<()> {
Ok(())
}
}
impl HtmlScrapRenderer for BuildRendererTest {
fn render_scraps(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_scrap_details: &ScrapDetails,
_backlinks_map: &BacklinksMap,
_scraps_by_key: &HashMap<ScrapKey, &Scrap>,
_site_nav: &SiteNav,
) -> ScrapsResult<()> {
Ok(())
}
}
impl HtmlScrapsIndexRenderer for BuildRendererTest {
fn render_scraps_index(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_scrap_details: &ScrapDetails,
_backlinks_map: &BacklinksMap,
_site_nav: &SiteNav,
) -> ScrapsResult<()> {
Ok(())
}
}
impl HtmlTagsIndexRenderer for BuildRendererTest {
fn render_tags_index(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_scraps: &[Scrap],
_backlinks_map: &BacklinksMap,
_site_nav: &SiteNav,
) -> ScrapsResult<()> {
Ok(())
}
}
impl HtmlTagRenderer for BuildRendererTest {
fn render_tags(
&self,
_base_url: &BaseUrl,
_html_metadata: &HtmlMetadata,
_backlinks_map: &BacklinksMap,
_site_nav: &SiteNav,
) -> ScrapsResult<()> {
Ok(())
}
}
impl CssRenderer for BuildRendererTest {
fn render_css(&self, _css_metadata: &CssMetadata) -> ScrapsResult<()> {
Ok(())
}
}
impl FontsRenderer for BuildRendererTest {
fn render_fonts(&self) -> ScrapsResult<()> {
Ok(())
}
}
impl JsRenderer for BuildRendererTest {
fn render_js(&self) -> ScrapsResult<()> {
Ok(())
}
}
impl SearchIndexJsonRenderer for BuildRendererTest {
fn render_search_index(&self, _base_url: &BaseUrl, _scraps: &[Scrap]) -> ScrapsResult<()> {
Ok(())
}
}
}