Skip to content

Commit

Permalink
refactor: improved ergonomics of PerseusApp
Browse files Browse the repository at this point in the history
BREAKING CHANGE: `.template()` and `.error_pages()` on `PerseusApp` now
take actual values, rather than functions that return those values
  • Loading branch information
arctic-hen7 committed Nov 26, 2022
1 parent 3f5ef8f commit 9c3444a
Show file tree
Hide file tree
Showing 35 changed files with 146 additions and 169 deletions.
4 changes: 2 additions & 2 deletions examples/.base/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/basic/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/custom_server/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ pub async fn dflt_server<
#[perseus::main(dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/freezing_and_thawing/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.global_state_creator(crate::global_state::get_global_state_creator())
}
6 changes: 3 additions & 3 deletions examples/core/global_state/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.global_state_creator(crate::global_state::get_global_state_creator())
}
4 changes: 2 additions & 2 deletions examples/core/helper_build_state/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
8 changes: 4 additions & 4 deletions examples/core/i18n/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.template(crate::templates::post::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.template(crate::templates::post::get_template())
.error_pages(crate::error_pages::get_error_pages())
.locales_and_translations_manager("en-US", &["fr-FR", "es-ES"])
}
6 changes: 3 additions & 3 deletions examples/core/idb_freezing/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.global_state_creator(crate::global_state::get_global_state_creator())
}
6 changes: 3 additions & 3 deletions examples/core/index_view/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ use perseus::{Html, PerseusApp, PerseusRoot};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.index_view(|cx| {
sycamore::view! { cx,
// We don't need a `<!DOCTYPE html>`, that's added automatically by Perseus (though that can be overridden if you really want by using `.index_view_str()`)
Expand Down
4 changes: 2 additions & 2 deletions examples/core/js_interop/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/plugins/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ use perseus::{plugins::Plugins, Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.plugins(Plugins::new().plugin_with_client_privilege(
plugin::get_test_plugin,
plugin::TestPluginData {
Expand Down
6 changes: 3 additions & 3 deletions examples/core/preload/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/router_state/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/core/rx_state/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
4 changes: 2 additions & 2 deletions examples/core/set_headers/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
16 changes: 8 additions & 8 deletions examples/core/state_generation/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::build_state::get_template)
.template(crate::templates::build_paths::get_template)
.template(crate::templates::request_state::get_template)
.template(crate::templates::incremental_generation::get_template)
.template(crate::templates::revalidation::get_template)
.template(crate::templates::revalidation_and_incremental_generation::get_template)
.template(crate::templates::amalgamation::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::build_state::get_template())
.template(crate::templates::build_paths::get_template())
.template(crate::templates::request_state::get_template())
.template(crate::templates::incremental_generation::get_template())
.template(crate::templates::revalidation::get_template())
.template(crate::templates::revalidation_and_incremental_generation::get_template())
.template(crate::templates::amalgamation::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
4 changes: 2 additions & 2 deletions examples/core/static_content/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
.static_alias("/test.txt", "test.txt")
}
6 changes: 3 additions & 3 deletions examples/core/unreactive/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/demos/auth/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::about::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::about::get_template())
.error_pages(crate::error_pages::get_error_pages())
.global_state_creator(crate::global_state::get_global_state_creator())
}
4 changes: 2 additions & 2 deletions examples/demos/fetching/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.error_pages(crate::error_pages::get_error_pages())
}
6 changes: 3 additions & 3 deletions examples/demos/full_page_layout/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ use sycamore::prelude::view;
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::long::get_template)
.error_pages(crate::error_pages::get_error_pages)
.template(crate::templates::index::get_template())
.template(crate::templates::long::get_template())
.error_pages(crate::error_pages::get_error_pages())
.index_view(|cx| {
view! { cx,
html {
Expand Down
8 changes: 4 additions & 4 deletions examples/website/app_in_a_file/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ use sycamore::prelude::*;
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
// Create a new template at `index`, which maps to our landing page
.template(|| {
.template(
Template::new("index")
.template_with_state(index_page)
.build_state_fn(get_index_build_state)
})
.template(|| Template::new("about").template(about_page))
.build_state_fn(get_index_build_state),
)
.template(Template::new("about").template(about_page))
}

// EXCERPT_START
Expand Down
2 changes: 1 addition & 1 deletion examples/website/i18n/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use sycamore::prelude::*;
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(|| Template::new("index").template(index_page))
.template(Template::new("index").template(index_page))
// EXCERPT_START
.locales_and_translations_manager(
"en-US", // Default locale
Expand Down
6 changes: 3 additions & 3 deletions examples/website/state_generation/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use sycamore::prelude::*;

#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new().template(|| {
PerseusApp::new().template(
Template::new("post")
.template_with_state(post_page)
.build_paths_fn(get_build_paths)
Expand All @@ -15,8 +15,8 @@ pub fn main<G: Html>() -> PerseusApp<G> {
// If the user requests a page we haven't created yet, still
// pass it to `get_build_state()` and cache the output for
// future users (lazy page building)
.incremental_generation()
})
.incremental_generation(),
)
}

// EXCERPT_START
Expand Down
13 changes: 6 additions & 7 deletions packages/perseus-cli/src/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,13 @@ use perseus::{Html, PerseusApp};
#[perseus::main(perseus_warp::dflt_server)]
pub fn main<G: Html>() -> PerseusApp<G> {
PerseusApp::new()
.template(crate::templates::index::get_template)
.template(crate::templates::index::get_template())
}"#;
static DFLT_INIT_MOD_RS: &str = r#"pub mod index;"#;
static DFLT_INIT_INDEX_RS: &str = r#"use perseus::Template;
use sycamore::prelude::{view, Html, Scope, SsrNode, View};
static DFLT_INIT_INDEX_RS: &str = r#"use perseus::prelude::*;
use sycamore::prelude::*;
#[perseus::template]
pub fn index_page<G: Html>(cx: Scope) -> View<G> {
fn index_page<G: Html>(cx: Scope) -> View<G> {
view! { cx,
// Don't worry, there are much better ways of styling in Perseus!
div(style = "display: flex; flex-direction: column; justify-content: center; align-items: center; height: 95vh;") {
Expand All @@ -170,8 +169,8 @@ pub fn index_page<G: Html>(cx: Scope) -> View<G> {
}
}
#[perseus::head]
pub fn head(cx: Scope) -> View<SsrNode> {
#[engine_only_fn]
fn head(cx: Scope) -> View<SsrNode> {
view! { cx,
title { "Welcome to Perseus!" }
}
Expand Down
8 changes: 4 additions & 4 deletions packages/perseus/src/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
use crate::errors::*;
use crate::i18n::{Locales, TranslationsManager};
use crate::stores::{ImmutableStore, MutableStore};
use crate::template::TemplateMap;
use crate::template::ArcTemplateMap;
use crate::template::{BuildPaths, StateGeneratorInfo, Template, TemplateState};
use crate::translator::Translator;
use crate::utils::minify;
Expand Down Expand Up @@ -337,7 +337,7 @@ pub async fn build_template_and_get_cfg(
/// for this. You should only build the most commonly used locales here (the
/// rest should be built on demand).
pub async fn build_templates_for_locale(
templates: &TemplateMap<SsrNode>,
templates: &ArcTemplateMap<SsrNode>,
translator: &Translator,
(immutable_store, mutable_store): (&ImmutableStore, &impl MutableStore),
global_state: &TemplateState,
Expand Down Expand Up @@ -374,7 +374,7 @@ pub async fn build_templates_for_locale(

/// Gets a translator and builds templates for a single locale.
pub async fn build_templates_and_translator_for_locale(
templates: &TemplateMap<SsrNode>,
templates: &ArcTemplateMap<SsrNode>,
locale: String,
(immutable_store, mutable_store): (&ImmutableStore, &impl MutableStore),
translations_manager: &impl TranslationsManager,
Expand All @@ -400,7 +400,7 @@ pub async fn build_templates_and_translator_for_locale(
#[derive(Debug)]
pub struct BuildProps<'a, M: MutableStore, T: TranslationsManager> {
/// All the templates in the app.
pub templates: &'a TemplateMap<SsrNode>,
pub templates: &'a ArcTemplateMap<SsrNode>,
/// The app's locales data.
pub locales: &'a Locales,
/// An immutable store.
Expand Down
2 changes: 1 addition & 1 deletion packages/perseus/src/engine/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ pub async fn build<M: MutableStore, T: TranslationsManager>(
// Build the site for all the common locales (done in parallel)
// All these parameters can be modified by `PerseusApp` and plugins, so there's
// no point in having a plugin opportunity here
let templates_map = app.get_templates_map();
let templates_map = app.get_atomic_templates_map();

// We have to get the translations manager last, because it consumes everything
let translations_manager = app.get_translations_manager().await;
Expand Down
2 changes: 1 addition & 1 deletion packages/perseus/src/engine/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ async fn build_and_export<M: MutableStore, T: TranslationsManager>(
return Err(err);
}
};
let templates_map = app.get_templates_map();
let templates_map = app.get_atomic_templates_map();
let index_view_str = app.get_index_view_str();
let root_id = app.get_root();
// This consumes `self`, so we get it finally
Expand Down
2 changes: 1 addition & 1 deletion packages/perseus/src/engine/export_error_page.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub async fn export_error_page(
) -> Result<(), Rc<EngineError>> {
let plugins = app.get_plugins();

let error_pages = app.get_error_pages();
let error_pages = app.get_atomic_error_pages();
// Prepare the HTML shell
let index_view_str = app.get_index_view_str();
let root_id = app.get_root();
Expand Down
3 changes: 1 addition & 2 deletions packages/perseus/src/engine/serve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ use crate::PerseusAppBase;
use futures::executor::block_on;
use std::env;
use std::fs;
use std::sync::Arc;
use sycamore::web::SsrNode;

/// Gets the host and port to serve on based on environment variables, which are
Expand Down Expand Up @@ -78,7 +77,7 @@ pub(crate) fn get_props<M: MutableStore, T: TranslationsManager>(
locales: app.get_locales(),
root_id: app_root,
snippets: "dist/pkg/snippets".to_string(),
error_pages: Arc::new(app.get_error_pages()),
error_pages: app.get_atomic_error_pages(),
// This will be available directly at `/.perseus/static`
static_dir: if fs::metadata(&static_dir_path).is_ok() {
Some(static_dir_path)
Expand Down
Loading

0 comments on commit 9c3444a

Please sign in to comment.