use std::{collections::HashMap, ops::Deref};
use sycamore::web::Html;
use super::TemplateInner;
#[derive(Debug)]
pub struct Entity<G: Html>(TemplateInner<G>);
impl<G: Html> From<TemplateInner<G>> for Entity<G> {
fn from(val: TemplateInner<G>) -> Self {
Self(val)
}
}
impl<G: Html> std::ops::Deref for Entity<G> {
type Target = TemplateInner<G>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
pub type EntityMap<G> = HashMap<String, Forever<Entity<G>>>;
#[derive(Debug)]
pub enum Forever<T: 'static> {
Owned(T),
StaticRef(&'static T),
}
impl<T: 'static> Deref for Forever<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
match &self {
Self::Owned(val) => val,
Self::StaticRef(val) => val,
}
}
}
impl<T: 'static> From<T> for Forever<T> {
fn from(val: T) -> Self {
Self::Owned(val)
}
}
impl<T: 'static> From<&'static T> for Forever<T> {
fn from(val: &'static T) -> Self {
Self::StaticRef(val)
}
}