Add feature flag for compile wasm
This commit is contained in:
parent
43f36b81a9
commit
5700d19a85
17 changed files with 52 additions and 167 deletions
3
Cargo.lock
generated
3
Cargo.lock
generated
|
@ -2257,7 +2257,6 @@ dependencies = [
|
||||||
name = "progress-pile-client"
|
name = "progress-pile-client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-graphql",
|
|
||||||
"chrono",
|
"chrono",
|
||||||
"chrono-tz",
|
"chrono-tz",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -2278,7 +2277,6 @@ name = "progress-pile-core"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-graphql",
|
"async-graphql",
|
||||||
"axum",
|
|
||||||
"chrono",
|
"chrono",
|
||||||
"chrono-tz",
|
"chrono-tz",
|
||||||
"clap",
|
"clap",
|
||||||
|
@ -2288,7 +2286,6 @@ dependencies = [
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
"log",
|
"log",
|
||||||
"sea-orm",
|
"sea-orm",
|
||||||
"sea-orm-migration",
|
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
|
|
@ -10,13 +10,13 @@ dirs = "6.0.0"
|
||||||
dotenv = "0.15.0"
|
dotenv = "0.15.0"
|
||||||
progress-pile-cli.path = "progress-pile-cli"
|
progress-pile-cli.path = "progress-pile-cli"
|
||||||
progress-pile-client.path = "progress-pile-client"
|
progress-pile-client.path = "progress-pile-client"
|
||||||
progress-pile-core = { path = "progress-pile-core" }
|
progress-pile-core = { path = "progress-pile-core", default-features = false}
|
||||||
progress-pile-migration = { path = "progress-pile-migration", default-features = false }
|
progress-pile-migration = { path = "progress-pile-migration", default-features = false }
|
||||||
progress-pile-server.path = "progress-pile-server"
|
progress-pile-server.path = "progress-pile-server"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
tempfile = "3.20.0"
|
tempfile = "3.20.0"
|
||||||
thiserror = "2.0.12"
|
thiserror = "2.0.12"
|
||||||
tokio = "1.44.2"
|
tokio = {version = "1.44.2", features = ["macros", "sync"] }
|
||||||
toml = "0.8.22"
|
toml = "0.8.22"
|
||||||
uuid = { version = "1.16.0", features = [ "serde", "v4" ] }
|
uuid = { version = "1.16.0", features = [ "serde", "v4" ] }
|
||||||
|
|
||||||
|
|
|
@ -4,18 +4,18 @@ version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["clap"]
|
default = ["desktop"]
|
||||||
clap = ["dep:clap"]
|
desktop = ["dep:clap", "progress-pile-core/desktop", "dep:progress-pile-migration", "dep:sea-orm", "tokio/io-util", "tokio/fs"]
|
||||||
|
wasm = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-graphql.workspace = true
|
|
||||||
chrono.workspace = true
|
chrono.workspace = true
|
||||||
chrono-tz.workspace = true
|
chrono-tz.workspace = true
|
||||||
clap = { workspace = true, optional = true }
|
clap = { workspace = true, optional = true }
|
||||||
dirs.workspace = true
|
dirs.workspace = true
|
||||||
progress-pile-core.workspace = true
|
progress-pile-core.workspace = true
|
||||||
progress-pile-migration = { workspace = true, features = ["client"]}
|
progress-pile-migration = { workspace = true, features = ["client"], optional = true}
|
||||||
sea-orm.workspace = true
|
sea-orm = { workspace = true, optional = true }
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
thiserror.workspace = true
|
thiserror.workspace = true
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
mod storage;
|
mod remote;
|
||||||
|
|
||||||
use std::{fmt::{Display, Formatter}, path::{Path, PathBuf}, str::FromStr};
|
use std::{fmt::{Display, Formatter}, path::{Path, PathBuf}, str::FromStr};
|
||||||
|
|
||||||
pub use progress_pile_core::config::*;
|
pub use progress_pile_core::config::*;
|
||||||
pub use storage::*;
|
pub use remote::*;
|
||||||
|
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use serde::{
|
use serde::{
|
||||||
|
@ -11,26 +11,24 @@ use serde::{
|
||||||
Serialize
|
Serialize
|
||||||
};
|
};
|
||||||
|
|
||||||
use tokio::{fs::{self, File}, io::AsyncWriteExt, sync::OnceCell};
|
#[cfg(feature="desktop")]
|
||||||
|
use tokio::{fs::{self, File}, io::AsyncWriteExt};
|
||||||
|
|
||||||
pub static DEFAULT_CONFIG_FILE_NAME: &str = "dpts_client.toml";
|
pub static DEFAULT_CONFIG_FILE_NAME: &str = "dpts_client.toml";
|
||||||
pub static DEFAULT_CONFIG_DIR_NAME: &str = "dpts";
|
pub static DEFAULT_CONFIG_DIR_NAME: &str = "dpts";
|
||||||
|
|
||||||
pub static CLIENT_CONFIG: OnceCell<ClientConfig> = OnceCell::const_new();
|
|
||||||
|
|
||||||
pub fn get_default_config_file_path() -> Result<PathBuf, Error> {
|
pub fn get_default_config_file_path() -> Result<PathBuf, Error> {
|
||||||
let config_dir = dirs::config_dir().ok_or(Error::DefaultConfigDir)?;
|
let config_dir = dirs::config_dir().ok_or(Error::DefaultConfigDir)?;
|
||||||
Ok(config_dir.join(DEFAULT_CONFIG_DIR_NAME).join(DEFAULT_CONFIG_FILE_NAME))
|
Ok(config_dir.join(DEFAULT_CONFIG_DIR_NAME).join(DEFAULT_CONFIG_FILE_NAME))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
||||||
|
pub struct ClientConfig {
|
||||||
pub struct Config {
|
pub remote: ClientRemoteConfig,
|
||||||
pub client: ClientConfig,
|
|
||||||
pub global: GlobalConfig,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
#[cfg(feature="desktop")]
|
||||||
|
impl ClientConfig {
|
||||||
pub async fn read_from_default_toml() -> Result<Self, Error> {
|
pub async fn read_from_default_toml() -> Result<Self, Error> {
|
||||||
Ok(Self::read_from_toml(&get_default_config_file_path()?).await?)
|
Ok(Self::read_from_toml(&get_default_config_file_path()?).await?)
|
||||||
}
|
}
|
||||||
|
@ -53,90 +51,9 @@ impl Config {
|
||||||
pub fn to_toml(&self) -> Result<String, Error> {
|
pub fn to_toml(&self) -> Result<String, Error> {
|
||||||
Ok(toml::to_string(self)?)
|
Ok(toml::to_string(self)?)
|
||||||
}
|
}
|
||||||
pub fn set_global(self) -> Result<(), Error> {
|
|
||||||
CLIENT_CONFIG.set(self.client)?;
|
|
||||||
GLOBAL_CONFIG.set(self.global)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
pub fn from_global() -> Result<Self, Error> {
|
|
||||||
Ok(Self {
|
|
||||||
client: CLIENT_CONFIG.get().ok_or(Error::UninitializedOnceCell("CLIENT_CONFIG".to_string()))?.clone(),
|
|
||||||
global: GLOBAL_CONFIG.get().ok_or(Error::UninitializedOnceCell("GLOBAL_CONFIG".to_string()))?.clone(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
|
||||||
pub struct ClientConfig {
|
|
||||||
pub storage: ClientStorageConfig,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use chrono_tz::UTC;
|
}
|
||||||
use tokio::sync::OnceCell;
|
|
||||||
|
|
||||||
const LOCAL_STORAGE_CONFIG_TOML: &str = r#"[client]
|
|
||||||
storage = "local"
|
|
||||||
|
|
||||||
[global]
|
|
||||||
"#;
|
|
||||||
static LOCAL_STORAGE_CONFIG_STRUCT: OnceCell<Config> = OnceCell::const_new();
|
|
||||||
|
|
||||||
async fn get_local_storage_client_config_struct() -> &'static Config {
|
|
||||||
LOCAL_STORAGE_CONFIG_STRUCT.get_or_init(|| async {
|
|
||||||
Config{
|
|
||||||
client: ClientConfig{
|
|
||||||
storage: ClientStorageConfig::Local,
|
|
||||||
},
|
|
||||||
global: GlobalConfig { time_zone: None },
|
|
||||||
}
|
|
||||||
}).await
|
|
||||||
}
|
|
||||||
#[tokio::test]
|
|
||||||
async fn deserialize_local_storage_client_config() {
|
|
||||||
let config: Config = Config::from_toml(LOCAL_STORAGE_CONFIG_TOML).unwrap();
|
|
||||||
assert_eq!(&config, get_local_storage_client_config_struct().await);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn serialize_local_storage_client_config() {
|
|
||||||
assert_eq!(LOCAL_STORAGE_CONFIG_TOML, get_local_storage_client_config_struct().await.to_toml().unwrap());
|
|
||||||
}
|
|
||||||
|
|
||||||
const REMOTE_STORAGE_CONFIG_TOML: &str = r#"[client.storage.remote]
|
|
||||||
endpoint = "https://example.com"
|
|
||||||
access_key = "test"
|
|
||||||
|
|
||||||
[global]
|
|
||||||
time_zone = "UTC"
|
|
||||||
"#;
|
|
||||||
static REMOTE_STORAGE_CONFIG_STRUCT: OnceCell<Config> = OnceCell::const_new();
|
|
||||||
|
|
||||||
async fn get_remote_storage_client_config_struct() -> &'static Config {
|
|
||||||
REMOTE_STORAGE_CONFIG_STRUCT.get_or_init(|| async {
|
|
||||||
Config{
|
|
||||||
client: ClientConfig {
|
|
||||||
storage: ClientStorageConfig::Remote(ClientRemoteStorageConfig {
|
|
||||||
endpoint: "https://example.com".to_string(),
|
|
||||||
access_key: "test".to_string(),
|
|
||||||
})
|
|
||||||
},
|
|
||||||
global: GlobalConfig { time_zone: Some(UTC) }
|
|
||||||
}
|
|
||||||
}).await
|
|
||||||
}
|
|
||||||
#[tokio::test]
|
|
||||||
async fn deserialize_remote_storage_client_config() { let config: Config = Config::from_toml(REMOTE_STORAGE_CONFIG_TOML).unwrap();
|
|
||||||
assert_eq!(&config, get_remote_storage_client_config_struct().await);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn serialize_remote_storage_client_config() {
|
|
||||||
assert_eq!(REMOTE_STORAGE_CONFIG_TOML, get_remote_storage_client_config_struct().await.to_toml().unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
pub struct ClientRemoteStorageConfig {
|
pub struct ClientRemoteConfig {
|
||||||
pub endpoint: String,
|
pub endpoint: String,
|
||||||
pub access_key: String,
|
pub access_key: String,
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
use core::time;
|
use core::time;
|
||||||
|
|
||||||
use async_graphql::*;
|
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
use sea_orm::entity::{
|
use sea_orm::entity::{
|
||||||
*,
|
*,
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
use async_graphql::*;
|
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
use sea_orm::entity::{
|
use sea_orm::entity::{
|
||||||
*,
|
*,
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
use crate::config::ClientConfig;
|
use crate::config::ClientConfig;
|
||||||
|
#[cfg(feature="desktop")]
|
||||||
use sea_orm::DatabaseConnection;
|
use sea_orm::DatabaseConnection;
|
||||||
use tokio::sync::OnceCell;
|
use tokio::sync::OnceCell;
|
||||||
|
|
||||||
|
#[cfg(feature="desktop")]
|
||||||
mod database;
|
mod database;
|
||||||
|
|
||||||
pub static GLOBAL: Global = Global{
|
pub static GLOBAL: Global = Global{
|
||||||
config: OnceCell::const_new(),
|
config: OnceCell::const_new(),
|
||||||
|
#[cfg(feature="desktop")]
|
||||||
database: OnceCell::const_new(),
|
database: OnceCell::const_new(),
|
||||||
};
|
};
|
||||||
pub struct Global {
|
pub struct Global {
|
||||||
config: OnceCell<ClientConfig>,
|
config: OnceCell<ClientConfig>,
|
||||||
|
#[cfg(feature="desktop")]
|
||||||
database: OnceCell<DatabaseConnection>,
|
database: OnceCell<DatabaseConnection>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
pub mod auth;
|
pub mod auth;
|
||||||
pub mod config;
|
pub mod config;
|
||||||
|
#[cfg(feature="desktop")]
|
||||||
pub mod entity;
|
pub mod entity;
|
||||||
pub mod global;
|
pub mod global;
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,16 @@ license.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["clap",]
|
default = ["desktop", "server"]
|
||||||
clap = ["dep:clap"]
|
cli = ["dep:clap"]
|
||||||
postgres = ["sea-orm/sqlx-postgres", "sea-orm/sqlx-postgres"]
|
desktop = ["cli", "sqlite", "fs"]
|
||||||
server = ["clap", "postgres"]
|
fs = []
|
||||||
|
sqlite = ["dep:sea-orm"]
|
||||||
|
postgres = ["sea-orm/sqlx-postgres"]
|
||||||
|
server = ["cli", "sqlite", "postgres", "fs"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
async-graphql.workspace = true
|
async-graphql.workspace = true
|
||||||
axum = "0.8"
|
|
||||||
chrono = {workspace = true}
|
chrono = {workspace = true}
|
||||||
chrono-tz.workspace = true
|
chrono-tz.workspace = true
|
||||||
clap = { workspace = true, optional = true }
|
clap = { workspace = true, optional = true }
|
||||||
|
@ -22,9 +24,9 @@ cynic = "3.10.0"
|
||||||
dotenv = {workspace = true}
|
dotenv = {workspace = true}
|
||||||
iana-time-zone = "0.1.63"
|
iana-time-zone = "0.1.63"
|
||||||
log = "0.4.27"
|
log = "0.4.27"
|
||||||
sea-orm.workspace = true
|
sea-orm = { workspace = true, optional = true }
|
||||||
sea-orm-migration.workspace = true
|
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
thiserror.workspace = true
|
thiserror.workspace = true
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
toml.workspace = true
|
toml.workspace = true
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
#[cfg(feature="clap")]
|
#[cfg(feature="cli")]
|
||||||
use clap::Args;
|
use clap::Args;
|
||||||
use sea_orm::ConnectOptions;
|
use sea_orm::ConnectOptions;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use tokio::sync::OnceCell;
|
|
||||||
|
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
|
|
||||||
|
@ -64,26 +63,25 @@ impl TryFrom<PartialDatabaseConfig> for DatabaseConfig{
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
|
#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
|
||||||
#[cfg_attr(feature="clap", derive(Args))]
|
#[cfg_attr(feature="cli", derive(Args))]
|
||||||
pub struct PartialDatabaseConfig {
|
pub struct PartialDatabaseConfig {
|
||||||
pub url: Option<String>,
|
pub url: Option<String>,
|
||||||
pub max_connections: Option<u32>,
|
pub max_connections: Option<u32>,
|
||||||
pub min_connections: Option<u32>,
|
pub min_connections: Option<u32>,
|
||||||
#[cfg_attr(feature="clap", arg(value_parser = parse_duration ))]
|
#[cfg_attr(feature="cli", arg(value_parser = parse_duration ))]
|
||||||
pub connect_timeout: Option<Duration>,
|
pub connect_timeout: Option<Duration>,
|
||||||
#[cfg_attr(feature="clap", arg(value_parser = parse_duration ))]
|
#[cfg_attr(feature="cli", arg(value_parser = parse_duration ))]
|
||||||
pub acquire_timeout: Option<Duration>,
|
pub acquire_timeout: Option<Duration>,
|
||||||
#[cfg_attr(feature="clap", arg(value_parser = parse_duration ))]
|
#[cfg_attr(feature="cli", arg(value_parser = parse_duration ))]
|
||||||
pub idle_timeout: Option<Duration>,
|
pub idle_timeout: Option<Duration>,
|
||||||
#[cfg_attr(feature="clap", arg(value_parser = parse_duration ))]
|
#[cfg_attr(feature="cli", arg(value_parser = parse_duration ))]
|
||||||
pub max_lifetime: Option<Duration>,
|
pub max_lifetime: Option<Duration>,
|
||||||
pub sqlx_logging: Option<bool>
|
pub sqlx_logging: Option<bool>
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature="clap")]
|
#[cfg(feature="cli")]
|
||||||
fn parse_duration(arg: &str) -> Result<std::time::Duration, Error> {
|
fn parse_duration(arg: &str) -> Result<std::time::Duration, Error> {
|
||||||
let seconds = arg.parse()?;
|
let seconds = arg.parse()?;
|
||||||
Ok(std::time::Duration::from_secs(seconds))
|
Ok(std::time::Duration::from_secs(seconds))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub static DATABASE_CONFIG: OnceCell<DatabaseConfig> = OnceCell::const_new();
|
|
|
@ -1,32 +0,0 @@
|
||||||
use chrono_tz::Tz;
|
|
||||||
#[cfg(feature="clap")]
|
|
||||||
use clap::Args;
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use tokio::sync::OnceCell;
|
|
||||||
|
|
||||||
use crate::error::Error;
|
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
|
|
||||||
pub struct GlobalConfig {
|
|
||||||
pub time_zone: Option<Tz>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TryFrom<PartialGlobalConfig> for GlobalConfig{
|
|
||||||
type Error = Error;
|
|
||||||
fn try_from(p: PartialGlobalConfig) -> Result<GlobalConfig, Self::Error> {
|
|
||||||
Ok(GlobalConfig{
|
|
||||||
time_zone: p.time_zone,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
|
|
||||||
#[cfg_attr(feature="clap", derive(Args))]
|
|
||||||
pub struct PartialGlobalConfig {
|
|
||||||
#[cfg_attr(feature="clap", arg(short, long))]
|
|
||||||
|
|
||||||
pub time_zone: Option<Tz>,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub static GLOBAL_CONFIG: OnceCell<GlobalConfig> = OnceCell::const_new();
|
|
|
@ -1,14 +1,8 @@
|
||||||
|
#[cfg(any(feature="sqlite", feature="postgres"))]
|
||||||
mod database;
|
mod database;
|
||||||
mod global;
|
|
||||||
|
|
||||||
|
#[cfg(any(feature="sqlite", feature="postgres"))]
|
||||||
pub use database::{
|
pub use database::{
|
||||||
DatabaseConfig,
|
DatabaseConfig,
|
||||||
PartialDatabaseConfig,
|
PartialDatabaseConfig,
|
||||||
DATABASE_CONFIG,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use global::{
|
|
||||||
GlobalConfig,
|
|
||||||
PartialGlobalConfig,
|
|
||||||
GLOBAL_CONFIG,
|
|
||||||
};
|
|
|
@ -20,6 +20,7 @@ pub enum Error {
|
||||||
InitializingOnceCell(String),
|
InitializingOnceCell(String),
|
||||||
#[error("Once cell is already Initialized: {0}")]
|
#[error("Once cell is already Initialized: {0}")]
|
||||||
AlreadyInitializedOnceCell(String),
|
AlreadyInitializedOnceCell(String),
|
||||||
|
#[cfg(any(feature="postgres", feature="sqlite"))]
|
||||||
#[error("DB Error: {0}")]
|
#[error("DB Error: {0}")]
|
||||||
Db(#[from]sea_orm::DbErr),
|
Db(#[from]sea_orm::DbErr),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
use chrono_tz::Tz;
|
use chrono_tz::Tz;
|
||||||
|
|
||||||
use crate::{config::DatabaseConfig, error::Error};
|
#[cfg(feature="sea-orm")]
|
||||||
|
use crate::config::DatabaseConfig;
|
||||||
|
use crate::error::Error;
|
||||||
|
|
||||||
pub trait GlobalConfig<T> {
|
pub trait GlobalConfig<T> {
|
||||||
fn get_config(&self) -> Option<T>;
|
fn get_config(&self) -> Option<T>;
|
||||||
fn get_or_try_init_config(&self) -> Result<T, Error>;
|
fn get_or_try_init_config(&self) -> Result<T, Error>;
|
||||||
|
fn get_or_try_init_config_from_file(&self) -> Result<T, Error>;
|
||||||
|
fn get_or_try_init_config_from_str(&self) -> Result<T, Error>;
|
||||||
|
#[cfg(feature="sea-orm")]
|
||||||
fn get_database_config(&self) -> Option<DatabaseConfig>;
|
fn get_database_config(&self) -> Option<DatabaseConfig>;
|
||||||
fn get_time_zone(&self) -> Option<Tz>;
|
fn get_time_zone(&self) -> Option<Tz>;
|
||||||
}
|
}
|
|
@ -1,9 +1,6 @@
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr};
|
use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr};
|
||||||
|
|
||||||
use sea_orm_migration::MigratorTrait;
|
|
||||||
use tokio::sync::OnceCell;
|
|
||||||
|
|
||||||
pub trait GlobalDatabase {
|
pub trait GlobalDatabase {
|
||||||
fn get_database(&self) -> Option<&DatabaseConnection>;
|
fn get_database(&self) -> Option<&DatabaseConnection>;
|
||||||
async fn get_or_try_init_database(&self) -> Result<&DatabaseConnection, Error>;
|
async fn get_or_try_init_database(&self) -> Result<&DatabaseConnection, Error>;
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
mod config;
|
mod config;
|
||||||
|
|
||||||
|
#[cfg(any(feature="sqlite", feature="postgres"))]
|
||||||
mod database;
|
mod database;
|
||||||
|
|
||||||
pub use config::GlobalConfig;
|
pub use config::GlobalConfig;
|
||||||
|
|
||||||
|
#[cfg(any(feature="sqlite", feature="postgres"))]
|
||||||
pub use database::GlobalDatabase;
|
pub use database::GlobalDatabase;
|
||||||
|
|
Loading…
Add table
Reference in a new issue