lib.rs 1.4 KB

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