broke code into modules

This commit is contained in:
Bart Massey 2024-05-29 14:30:52 -07:00
parent 48495fe737
commit 5fb16fb5b7
3 changed files with 87 additions and 77 deletions

42
src/cookie.rs Normal file
View File

@ -0,0 +1,42 @@
use crate::*;
#[derive(Properties, Clone, PartialEq)]
pub struct CookieProps {
pub cookie: String,
}
impl CookieProps {
pub fn acquire_cookie() -> Self {
let cookie_options = cookies::CookieOptions::default()
.expires_after(core::time::Duration::from_secs(
52 * 7 * 24 * 60 * 60
));
match cookies::get("test") {
Some(Ok(cookie)) => {
log!("got cookie");
return Self { cookie: cookie };
}
Some(Err(e)) => {
log!(format!("cookie error: {}", e));
}
None => {
log!("did not find cookie");
}
}
log!("setting cookie");
cookies::set("test", "123", &cookie_options);
let cookie = "123".to_string();
// XXX Don't do this!! No secrets in logs!
// log!(&cookie);
Self { cookie }
}
}
#[function_component(Cookie)]
pub fn cookie(CookieProps { cookie }: &CookieProps) -> Html {
html! {
<div>
<p>{cookie.clone()}</p>
</div>
}
}

38
src/joke.rs Normal file
View File

@ -0,0 +1,38 @@
use crate::*;
#[derive(Properties, Clone, PartialEq, serde::Deserialize)]
pub struct JokeStruct {
pub id: String,
pub whos_there: String,
pub answer_who: String,
pub tags: Option<HashSet<String>>,
pub source: Option<String>,
}
impl JokeStruct {
pub async fn get_joke() -> Result<Self, gloo_net::Error> {
http::Request::get("http://localhost:3000/api/v1/joke")
.send()
.await?
.json()
.await
}
}
#[derive(Properties, Clone, PartialEq, serde::Deserialize)]
pub struct JokeProps {
pub joke: JokeStruct,
}
#[function_component(Joke)]
pub fn joke(joke: &JokeProps) -> Html {
html! {
<div class="joke">
<span class="teller">{"Knock-Knock!"}</span><br/>
<span class="tellee">{"Who's there?"}</span><br/>
<span class="teller">{joke.joke.whos_there.clone()}</span><br/>
<span class="tellee">{format!("{} who?", &joke.joke.whos_there)}</span><br/>
<span class="teller">{joke.joke.answer_who.clone()}</span><br/>
</div>
}
}

View File

@ -1,3 +1,9 @@
mod cookie;
mod joke;
use cookie::*;
use joke::*;
use std::collections::HashSet; use std::collections::HashSet;
extern crate serde; extern crate serde;
@ -7,85 +13,9 @@ extern crate wasm_bindgen_futures;
use wasm_cookies as cookies; use wasm_cookies as cookies;
use yew::prelude::*; use yew::prelude::*;
#[derive(Properties, Clone, PartialEq)]
struct CookieProps {
cookie: String,
}
impl CookieProps {
fn setup_cookie() -> Self {
let cookie_options = cookies::CookieOptions::default()
.expires_after(core::time::Duration::from_secs(52 * 7 * 24 * 60 * 60));
match cookies::get("test") {
Some(Ok(cookie)) => {
log!("got cookie");
return Self { cookie: cookie };
}
Some(Err(e)) => {
log!(format!("cookie error: {}", e));
}
None => {
log!("did not find cookie");
}
}
log!("setting cookie");
cookies::set("test", "123", &cookie_options);
let cookie = "123".to_string();
// XXX Don't do this!! No secrets in logs!
// log!(&cookie);
Self { cookie }
}
}
#[function_component(Cookie)]
fn cookie(CookieProps { cookie }: &CookieProps) -> Html {
html! {
<div>
<p>{cookie.clone()}</p>
</div>
}
}
#[derive(Properties, Clone, PartialEq, serde::Deserialize)]
struct JokeStruct {
id: String,
whos_there: String,
answer_who: String,
tags: Option<HashSet<String>>,
source: Option<String>,
}
impl JokeStruct {
async fn get_joke() -> Result<Self, gloo_net::Error> {
http::Request::get("http://localhost:3000/api/v1/joke")
.send()
.await?
.json()
.await
}
}
#[derive(Properties, Clone, PartialEq, serde::Deserialize)]
struct JokeProps {
joke: JokeStruct,
}
#[function_component(Joke)]
fn joke(joke: &JokeProps) -> Html {
html! {
<div class="joke">
<span class="teller">{"Knock-Knock!"}</span><br/>
<span class="tellee">{"Who's there?"}</span><br/>
<span class="teller">{joke.joke.whos_there.clone()}</span><br/>
<span class="tellee">{format!("{} who?", &joke.joke.whos_there)}</span><br/>
<span class="teller">{joke.joke.answer_who.clone()}</span><br/>
</div>
}
}
#[function_component(App)] #[function_component(App)]
fn app() -> Html { fn app() -> Html {
let cookie = use_state(|| CookieProps::setup_cookie()); let cookie = use_state(|| CookieProps::acquire_cookie());
let joke = use_state(|| Err(gloo_net::Error::GlooError("uninit".to_string()))); let joke = use_state(|| Err(gloo_net::Error::GlooError("uninit".to_string())));
let get_joke = joke.clone(); let get_joke = joke.clone();