lib.rs 1.4 KB

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