morethantext-web/src/morethantext/mod.rs

82 lines
1.6 KiB
Rust
Raw Normal View History

2023-05-29 15:42:32 -04:00
mod cache;
mod error;
2023-05-30 00:18:13 -04:00
mod store;
2023-05-29 15:42:32 -04:00
2023-04-04 09:59:29 -04:00
use async_std::{
2023-05-29 15:42:32 -04:00
channel::{unbounded, Sender},
2023-04-04 09:59:29 -04:00
path::PathBuf,
task::spawn,
};
2023-05-29 15:42:32 -04:00
use cache::Cache;
use error::{ErrorCode, MTTError};
2023-05-30 00:18:13 -04:00
use store::Store;
2023-06-03 15:27:26 -04:00
const ENTRY: &str = "EntryPoint";
#[derive(Clone, Debug)]
2023-06-03 15:27:26 -04:00
struct Data<D> {
id: Option<String>,
data: Option<D>,
}
impl<D> Data<D> {
fn from_id<S>(id: S) -> Self
where
S: Into<String>,
{
Self {
id: Some(id.into()),
data: None,
}
}
2023-04-08 15:04:04 -04:00
}
2023-04-04 09:59:29 -04:00
#[derive(Clone)]
pub struct MoreThanText {
2023-05-29 15:42:32 -04:00
to_cache: Sender<String>,
2023-06-03 15:27:26 -04:00
entry: Data<Store>,
2023-04-04 09:59:29 -04:00
}
impl MoreThanText {
2023-05-29 15:42:32 -04:00
fn new(to_cache: Sender<String>) -> Self {
2023-06-03 15:27:26 -04:00
Self {
to_cache: to_cache,
entry: Data::from_id(ENTRY),
}
2023-04-12 18:33:39 -04:00
}
2023-06-03 15:27:26 -04:00
async fn session(&self) -> Store {
Store::new()
2023-04-08 15:04:04 -04:00
}
}
#[cfg(test)]
2023-05-29 15:42:32 -04:00
mod mtt {
2023-04-08 15:04:04 -04:00
use super::*;
use tempfile::tempdir;
2023-04-18 09:02:18 -04:00
#[async_std::test]
2023-05-29 15:42:32 -04:00
async fn create_new() {
2023-04-18 09:02:18 -04:00
let dir = tempdir().unwrap();
2023-05-29 15:42:32 -04:00
let mtt = start_db(dir.path()).await.unwrap();
2023-06-03 15:27:26 -04:00
assert_eq!(mtt.entry.id, Some(ENTRY.to_string()));
assert!(mtt.entry.data.is_none());
let store = mtt.session().await;
let expected: Vec<String> = Vec::new();
assert_eq!(store.list(), expected);
2023-04-12 18:33:39 -04:00
}
2023-04-04 12:36:10 -04:00
}
2023-05-29 15:42:32 -04:00
pub async fn start_db<P>(dir: P) -> Result<MoreThanText, MTTError>
2023-04-04 09:59:29 -04:00
where
P: Into<PathBuf>,
{
2023-05-29 15:42:32 -04:00
let path = dir.into();
2023-04-04 09:59:29 -04:00
let (s, r) = unbounded();
spawn(async move {
2023-05-29 15:42:32 -04:00
let cache = Cache::new(path).await;
cache.listen(r).await;
2023-04-04 09:59:29 -04:00
});
2023-05-29 15:42:32 -04:00
Ok(MoreThanText::new(s))
2023-04-04 09:59:29 -04:00
}