lib.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. pub use diesel::*;
  2. pub use diesel_derives::*;
  3. use diesel_migrations::*;
  4. use std::{fmt::Debug, io, path::Path};
  5. pub mod kv;
  6. mod sqlite;
  7. use crate::sqlite::PoolConfig;
  8. pub use crate::sqlite::{ConnectionPool, DBConnection, Database};
  9. pub mod schema;
  10. #[macro_use]
  11. pub mod macros;
  12. #[macro_use]
  13. extern crate diesel;
  14. #[macro_use]
  15. extern crate diesel_derives;
  16. #[macro_use]
  17. extern crate diesel_migrations;
  18. pub type Error = diesel::result::Error;
  19. pub mod prelude {
  20. pub use super::UserDatabaseConnection;
  21. pub use crate::*;
  22. pub use diesel::SqliteConnection;
  23. pub use diesel::{query_dsl::*, BelongingToDsl, ExpressionMethods, RunQueryDsl};
  24. }
  25. embed_migrations!("../flowy-sqlite/migrations/");
  26. pub const DB_NAME: &str = "flowy-database.db";
  27. pub fn init(storage_path: &str) -> Result<Database, io::Error> {
  28. if !Path::new(storage_path).exists() {
  29. std::fs::create_dir_all(storage_path)?;
  30. }
  31. let pool_config = PoolConfig::default();
  32. let database = Database::new(storage_path, DB_NAME, pool_config).map_err(as_io_error)?;
  33. let conn = database.get_connection().map_err(as_io_error)?;
  34. embedded_migrations::run(&*conn).map_err(as_io_error)?;
  35. Ok(database)
  36. }
  37. fn as_io_error<E>(e: E) -> io::Error
  38. where
  39. E: Into<crate::sqlite::Error> + Debug,
  40. {
  41. let msg = format!("{:?}", e);
  42. io::Error::new(io::ErrorKind::NotConnected, msg)
  43. }
  44. pub trait UserDatabaseConnection: Send + Sync {
  45. fn get_connection(&self) -> Result<DBConnection, String>;
  46. }