Initial commit

This commit is contained in:
2021-12-30 15:54:48 +00:00
commit e6841826f2
16 changed files with 1401 additions and 0 deletions

55
src/templates/index.rs Normal file
View File

@@ -0,0 +1,55 @@
use perseus::{
http::header::{HeaderMap, HeaderName},
Html, RenderFnResultWithCause, SsrNode, Template,
};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, view, View};
#[derive(Serialize, Deserialize, Debug)]
pub struct IndexPageProps {
pub greeting: String,
}
#[perseus::template(IndexPage)]
#[component(IndexPage<G>)]
pub fn index_page(props: IndexPageProps) -> View<G> {
view! {
p {(props.greeting)}
a(href = "about", id = "about-link") { "About!" }
}
}
pub fn get_template<G: Html>() -> Template<G> {
Template::new("index")
.build_state_fn(get_build_props)
.template(index_page)
.head(head)
.set_headers_fn(set_headers)
}
#[perseus::head]
pub fn head(_props: IndexPageProps) -> View<SsrNode> {
view! {
title { "Index Page | Perseus Example Basic" }
}
}
#[perseus::autoserde(build_state)]
pub async fn get_build_props(
_path: String,
_locale: String,
) -> RenderFnResultWithCause<IndexPageProps> {
Ok(IndexPageProps {
greeting: "Hello World!".to_string(),
})
}
#[perseus::autoserde(set_headers)]
pub fn set_headers(props: Option<IndexPageProps>) -> HeaderMap {
let mut map = HeaderMap::new();
map.insert(
HeaderName::from_lowercase(b"x-greeting").unwrap(),
props.unwrap().greeting.parse().unwrap(),
);
map
}