lib.rs 1.3 KB

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