feat(rustadapter): index notebook

This commit is contained in:
Matthieu Bessat 2024-02-05 15:28:45 +01:00
parent e292058b5c
commit ea3a307f96
12 changed files with 170 additions and 18 deletions

View file

@ -4,6 +4,73 @@ pub use crate::java_glue::*;
use rifgen::rifgen_attr::*;
use popequer::{database::read::read_db, fs_notebook::NotebookContext, indexer::index_and_save, views::calendar::get_upcoming_events};
use serde::Serialize;
struct PopequerAdapter {
context: NotebookContext
}
#[generate_interface]
enum PopequerAdapterErr {
ReadDb,
Indexing,
View
}
#[derive(Serialize)]
struct EventItem {
name: String,
start_time: String,
end_time: Option<String>
}
impl PopequerAdapter {
#[generate_interface(constructor)]
fn new(notebook_fs_path: String) -> PopequerAdapter {
PopequerAdapter {
context: NotebookContext {
base_path: notebook_fs_path.into()
}
}
}
#[generate_interface]
fn index(&self) -> String {
match index_and_save(
&self.context
) {
Ok(_n) => format!("Indexing OK"),
Err(err) => format!("Indexing ERR {err:?}")
}
}
#[generate_interface]
fn upcoming_events(&self) -> String {
let notebook = match read_db(&self.context) {
Ok(n) => n,
Err(err) => {
return format!("Err: {err:?}");
}
};
let events = match get_upcoming_events(&notebook) {
Ok(x) => x,
Err(err) => {
return format!("Err: {err:?}");
}
};
let formatted_events: Vec<EventItem> = events.iter().map(|e| {
EventItem {
name: e.name.clone(),
start_time: e.start_time.to_rfc3339(),
end_time: e.end_time.map(|x| x.to_rfc3339())
}
}).collect();
serde_json::to_string(&formatted_events).expect("Cannot serialize into json")
}
}
struct Foo {
data: i32
}