Skip to content

Commit

Permalink
refactor: ♻️ created sane library interface
Browse files Browse the repository at this point in the history
  • Loading branch information
arctic-hen7 committed Aug 22, 2021
1 parent 0e0f2f1 commit 51284a8
Show file tree
Hide file tree
Showing 16 changed files with 31 additions and 40 deletions.
3 changes: 1 addition & 2 deletions examples/showcase/app/src/bin/build.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use futures::executor::block_on;
use perseus::{build::build_templates, config_manager::FsConfigManager};
use perseus::{build_templates, FsConfigManager, SsrNode};
use perseus_showcase_app::pages;
use sycamore::prelude::SsrNode;

fn main() {
let config_manager = FsConfigManager::new();
Expand Down
2 changes: 1 addition & 1 deletion examples/showcase/app/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pub mod pages;

use perseus::shell::{app_shell, ErrorPages};
use perseus::{app_shell, ErrorPages};
use sycamore::prelude::*;
use sycamore_router::{BrowserRouter, Route};
use wasm_bindgen::prelude::*;
Expand Down
2 changes: 1 addition & 1 deletion examples/showcase/app/src/pages/about.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use perseus::template::Template;
use perseus::Template;
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;

Expand Down
5 changes: 2 additions & 3 deletions examples/showcase/app/src/pages/index.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use perseus::template::Template;
use perseus::errors::ErrorCause;
use perseus::{Template, StringResultWithCause};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;
Expand All @@ -23,7 +22,7 @@ pub fn get_page<G: GenericNode>() -> Template<G> {
.template(template_fn())
}

pub async fn get_static_props(_path: String) -> Result<String, (String, ErrorCause)> {
pub async fn get_static_props(_path: String) -> StringResultWithCause<String> {
Ok(serde_json::to_string(&IndexPageProps {
greeting: "Hello World!".to_string(),
})
Expand Down
8 changes: 3 additions & 5 deletions examples/showcase/app/src/pages/ip.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// This page illustrates SSR

use perseus::errors::ErrorCause;
use perseus::template::{Template};
use perseus::Request;
use perseus::{Template, Request, StringResultWithCause};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;
Expand All @@ -29,8 +27,8 @@ pub fn get_page<G: GenericNode>() -> Template<G> {
.template(template_fn())
}

pub async fn get_request_state(_path: String, req: Request) -> Result<String, (String, ErrorCause)> {
// Err(("this is a test error!".to_string(), ErrorCause::Client(None)))
pub async fn get_request_state(_path: String, req: Request) -> StringResultWithCause<String> {
// Err(("this is a test error!".to_string(), perseus::ErrorCause::Client(None)))
Ok(serde_json::to_string(&IpPageProps {
// Gets the client's IP address
ip: format!(
Expand Down
2 changes: 1 addition & 1 deletion examples/showcase/app/src/pages/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pub mod post;
pub mod time;
pub mod time_root;

use perseus::{get_templates_map, template::Template};
use perseus::{get_templates_map, Template};
use std::collections::HashMap;
use sycamore::prelude::GenericNode;

Expand Down
2 changes: 1 addition & 1 deletion examples/showcase/app/src/pages/new_post.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use perseus::template::Template;
use perseus::Template;
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;

Expand Down
5 changes: 2 additions & 3 deletions examples/showcase/app/src/pages/post.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use perseus::template::Template;
use perseus::errors::ErrorCause;
use perseus::{Template, StringResultWithCause, ErrorCause};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;
Expand Down Expand Up @@ -32,7 +31,7 @@ pub fn get_page<G: GenericNode>() -> Template<G> {
.template(template_fn())
}

pub async fn get_static_props(path: String) -> Result<String, (String, ErrorCause)> {
pub async fn get_static_props(path: String) -> StringResultWithCause<String> {
// This path is illegal, and can't be rendered
if path == "post/tests" {
return Err(("illegal page".to_string(), ErrorCause::Client(Some(404))))
Expand Down
5 changes: 2 additions & 3 deletions examples/showcase/app/src/pages/time.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use perseus::template::Template;
use perseus::errors::ErrorCause;
use perseus::{Template, StringResultWithCause};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;
Expand All @@ -26,7 +25,7 @@ pub fn get_page<G: GenericNode>() -> Template<G> {
.build_paths_fn(Arc::new(get_build_paths))
}

pub async fn get_build_state(_path: String) -> Result<String, (String, ErrorCause)> {
pub async fn get_build_state(_path: String) -> StringResultWithCause<String> {
Ok(serde_json::to_string(&TimePageProps {
time: format!("{:?}", std::time::SystemTime::now()),
})
Expand Down
5 changes: 2 additions & 3 deletions examples/showcase/app/src/pages/time_root.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use perseus::template::Template;
use perseus::errors::ErrorCause;
use perseus::{Template, StringResultWithCause};
use serde::{Deserialize, Serialize};
use sycamore::prelude::{component, template, GenericNode, Template as SycamoreTemplate};
use std::sync::Arc;
Expand All @@ -26,7 +25,7 @@ pub fn get_page<G: GenericNode>() -> Template<G> {
.build_state_fn(Arc::new(get_build_state))
}

pub async fn get_build_state(_path: String) -> Result<String, (String, ErrorCause)> {
pub async fn get_build_state(_path: String) -> StringResultWithCause<String> {
Ok(serde_json::to_string(&TimePageProps {
time: format!("{:?}", std::time::SystemTime::now()),
})
Expand Down
3 changes: 1 addition & 2 deletions examples/showcase/server-actix-web/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use perseus::config_manager::FsConfigManager;
use perseus::{FsConfigManager, SsrNode};
use perseus_actix_web::{configurer, Options};
use perseus_showcase_app::pages;
use sycamore::SsrNode;
use actix_web::{HttpServer, App};

#[actix_web::main]
Expand Down
9 changes: 1 addition & 8 deletions packages/perseus-actix-web/src/configurer.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
use actix_files::NamedFile;
use actix_web::web;
use sycamore::prelude::SsrNode;

use perseus::{
config_manager::ConfigManager,
serve::get_render_cfg,
template::TemplateMap,
};

use perseus::{ConfigManager, get_render_cfg, TemplateMap, SsrNode};
use crate::page_data::page_data;

/// The options for setting up the Actix Web integration. This should be literally constructed, as nothing is optional.
Expand Down
6 changes: 1 addition & 5 deletions packages/perseus-actix-web/src/page_data.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
use perseus::{
config_manager::ConfigManager,
errors::err_to_status_code,
serve::get_page,
};
use perseus::{ConfigManager, err_to_status_code, get_page};
use actix_web::{web, HttpRequest, HttpResponse, http::StatusCode};
use std::collections::HashMap;
use crate::conv_req::convert_req;
Expand Down
11 changes: 10 additions & 1 deletion packages/perseus/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,13 @@ pub mod template;
pub use http;
pub use http::Request as HttpRequest;
/// All HTTP requests use empty bodies for simplicity of passing them around. They'll never need payloads (value in path requested).
pub type Request = HttpRequest<()>;
pub type Request = HttpRequest<()>;
pub use sycamore::{DomNode, SsrNode};

pub use crate::build::{build_template, build_templates};
pub use crate::config_manager::{ConfigManager, FsConfigManager};
pub use crate::decode_time_str::decode_time_str;
pub use crate::serve::{get_page, get_render_cfg};
pub use crate::shell::{app_shell, ErrorPages};
pub use crate::template::{Template, TemplateMap, States, StringResult, StringResultWithCause};
pub use crate::errors::{err_to_status_code, ErrorCause};
1 change: 1 addition & 0 deletions packages/perseus/src/serve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub struct PageData {
}

/// Gets the configuration of how to render each page.
// TODO use a config manager here
pub fn get_render_cfg() -> Result<HashMap<String, String>> {
let content = fs::read_to_string("../app/dist/render_conf.json")?;
let cfg = serde_json::from_str::<HashMap<String, String>>(&content)?;
Expand Down
2 changes: 1 addition & 1 deletion packages/perseus/src/shell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use wasm_bindgen::JsCast;
use wasm_bindgen_futures::JsFuture;
use web_sys::{Request, RequestInit, RequestMode, Response};

pub async fn fetch(url: &str) -> Result<Option<String>> {
pub(crate) async fn fetch(url: &str) -> Result<Option<String>> {
let js_err_handler = |err: JsValue| ErrorKind::JsErr(format!("{:?}", err));
let mut opts = RequestInit::new();
opts.method("GET").mode(RequestMode::Cors);
Expand Down

0 comments on commit 51284a8

Please sign in to comment.