cargo fmt
This commit is contained in:
parent
8a52d12891
commit
d14bfda77e
10
src/cache/memory.rs
vendored
10
src/cache/memory.rs
vendored
|
@ -3,7 +3,7 @@ use std::collections::HashMap;
|
|||
use async_trait::async_trait;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
use super::{CacheMechanism, CachedItem, should_use, Tier};
|
||||
use super::{should_use, CacheMechanism, CachedItem, Tier};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Memory {}
|
||||
|
@ -26,9 +26,11 @@ impl CacheMechanism for Memory {
|
|||
let mut r = c.clone();
|
||||
r.tier = Some(Tier::Memory);
|
||||
Some(r)
|
||||
} else { None }
|
||||
},
|
||||
None => None
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
32
src/cache/mod.rs
vendored
32
src/cache/mod.rs
vendored
|
@ -1,9 +1,12 @@
|
|||
mod memory;
|
||||
mod sqlite;
|
||||
|
||||
use std::{time::{SystemTime, UNIX_EPOCH}, fmt};
|
||||
use async_trait::async_trait;
|
||||
use sqlx::FromRow;
|
||||
use std::{
|
||||
fmt,
|
||||
time::{SystemTime, UNIX_EPOCH},
|
||||
};
|
||||
|
||||
use self::{memory::Memory, sqlite::Sqlite};
|
||||
|
||||
|
@ -14,7 +17,10 @@ pub struct Cache {
|
|||
}
|
||||
|
||||
pub async fn init_cache() -> Cache {
|
||||
Cache{ memory: memory::new(), sqlite: sqlite::new().await }
|
||||
Cache {
|
||||
memory: memory::new(),
|
||||
sqlite: sqlite::new().await,
|
||||
}
|
||||
}
|
||||
|
||||
/// Tier enums take an i64, which is the amount of time in seconds
|
||||
|
@ -24,7 +30,7 @@ pub enum Tier {
|
|||
Memory,
|
||||
Sqlite,
|
||||
External,
|
||||
None
|
||||
None,
|
||||
}
|
||||
|
||||
impl fmt::Display for Tier {
|
||||
|
@ -44,7 +50,7 @@ pub struct CachedItem {
|
|||
pub content: String,
|
||||
cached: i64,
|
||||
#[sqlx(default)]
|
||||
tier: Option<Tier>
|
||||
tier: Option<Tier>,
|
||||
}
|
||||
|
||||
impl CachedItem {
|
||||
|
@ -68,7 +74,8 @@ impl Cache {
|
|||
}
|
||||
if self.sqlite.is_some() {
|
||||
let sq = self.sqlite.clone().unwrap();
|
||||
let s = sq.get(key).await; if s.is_some() {
|
||||
let s = sq.get(key).await;
|
||||
if s.is_some() {
|
||||
let current_time = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.expect("SystemTime before UNIX EPOCH!")
|
||||
|
@ -78,11 +85,11 @@ impl Cache {
|
|||
let mut refresh_memory = s.clone().unwrap();
|
||||
refresh_memory.cached = current_time;
|
||||
let _ = self.memory.set(key.clone(), refresh_memory).await;
|
||||
return s
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
return None
|
||||
return None;
|
||||
}
|
||||
|
||||
pub async fn set(&self, key: String, content_type: String, content: String) -> bool {
|
||||
|
@ -92,7 +99,12 @@ impl Cache {
|
|||
.as_secs()
|
||||
.try_into()
|
||||
.unwrap();
|
||||
let cached_item = CachedItem{ content_type, content, cached: current_time, tier: None };
|
||||
let cached_item = CachedItem {
|
||||
content_type,
|
||||
content,
|
||||
cached: current_time,
|
||||
tier: None,
|
||||
};
|
||||
self.memory.set(key.clone(), cached_item.clone()).await;
|
||||
if self.sqlite.is_some() {
|
||||
let sq = self.sqlite.clone().unwrap();
|
||||
|
@ -115,7 +127,9 @@ fn should_use(item: &CachedItem, tier: Tier) -> bool {
|
|||
let current_time: i64 = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.expect("SystemTime before UNIX EPOCH!")
|
||||
.as_secs().try_into().unwrap();
|
||||
.as_secs()
|
||||
.try_into()
|
||||
.unwrap();
|
||||
|
||||
current_time <= (item.cached + cache_time) && item.content != ""
|
||||
}
|
||||
|
|
15
src/cache/sqlite.rs
vendored
15
src/cache/sqlite.rs
vendored
|
@ -1,18 +1,22 @@
|
|||
use std::{env, str::FromStr};
|
||||
|
||||
use async_trait::async_trait;
|
||||
use sqlx::{Pool, sqlite::{SqlitePoolOptions, SqliteJournalMode, SqliteConnectOptions}};
|
||||
use sqlx::{
|
||||
sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions},
|
||||
Pool,
|
||||
};
|
||||
|
||||
use super::{CacheMechanism, CachedItem, should_use, Tier};
|
||||
use super::{should_use, CacheMechanism, CachedItem, Tier};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Sqlite {
|
||||
pool: Pool<sqlx::Sqlite>
|
||||
pool: Pool<sqlx::Sqlite>,
|
||||
}
|
||||
|
||||
pub async fn new() -> Option<Sqlite> {
|
||||
let path = env::var("DATABASE_PATH").unwrap_or("gs.db".to_owned());
|
||||
let opts = SqliteConnectOptions::from_str(&path).unwrap()
|
||||
let opts = SqliteConnectOptions::from_str(&path)
|
||||
.unwrap()
|
||||
.journal_mode(SqliteJournalMode::Wal)
|
||||
.create_if_missing(true);
|
||||
|
||||
|
@ -25,7 +29,8 @@ impl CacheMechanism for Sqlite {
|
|||
async fn get(&self, key: &String) -> Option<CachedItem> {
|
||||
let res = sqlx::query_as::<_, CachedItem>("SELECT * FROM cached WHERE route = $1")
|
||||
.bind(&key)
|
||||
.fetch_one(&self.pool).await;
|
||||
.fetch_one(&self.pool)
|
||||
.await;
|
||||
if res.is_ok() {
|
||||
let c = res.unwrap();
|
||||
if should_use(&c, Tier::Sqlite) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
|
||||
mod posts;
|
||||
mod cache;
|
||||
mod posts;
|
||||
|
||||
use axum::extract::Path;
|
||||
use axum::response::IntoResponse;
|
||||
|
@ -89,7 +89,9 @@ async fn main() -> Result<(), sqlx::Error> {
|
|||
sqlx::migrate!("./migrations").run(&pool).await?;
|
||||
|
||||
env::set_var("DATABASE_PATH", &args.database_path);
|
||||
let state = AppState { cache: init_cache().await };
|
||||
let state = AppState {
|
||||
cache: init_cache().await,
|
||||
};
|
||||
|
||||
let app = Router::new()
|
||||
.route("/", get(homepage))
|
||||
|
@ -284,7 +286,7 @@ async fn cached_page<T>(
|
|||
.header("cache", "miss")
|
||||
.status(StatusCode::OK)
|
||||
.body(Full::from(bytes))
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
} else {
|
||||
let i = item.unwrap();
|
||||
return Response::builder()
|
||||
|
|
11
src/posts.rs
11
src/posts.rs
|
@ -1,6 +1,9 @@
|
|||
use std::{fs::{self, File}, io::Read};
|
||||
use std::{
|
||||
fs::{self, File},
|
||||
io::Read,
|
||||
};
|
||||
|
||||
use maud::{Render, Markup, html};
|
||||
use maud::{html, Markup, Render};
|
||||
use orgize::Org;
|
||||
|
||||
pub struct PostMetadata {
|
||||
|
@ -13,7 +16,7 @@ pub struct PostContent {
|
|||
pub title: String,
|
||||
pub date: String,
|
||||
pub content: String,
|
||||
pub html: String
|
||||
pub html: String,
|
||||
}
|
||||
|
||||
impl Render for PostMetadata {
|
||||
|
@ -114,7 +117,7 @@ pub fn blog_post(post: String) -> Result<PostContent, bool> {
|
|||
title,
|
||||
date,
|
||||
content,
|
||||
html
|
||||
html,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue