-
Notifications
You must be signed in to change notification settings - Fork 487
Expand file tree
/
Copy pathconfig.rs
More file actions
74 lines (67 loc) · 2.42 KB
/
config.rs
File metadata and controls
74 lines (67 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use crate::LIBSQL_PAGE_SIZE;
use url::Url;
use libsql_replication::rpc::metadata;
use tokio::time::Duration;
use super::TXN_TIMEOUT;
#[derive(Debug, Clone)]
pub struct DatabaseConfig {
pub block_reads: bool,
pub block_writes: bool,
/// The reason why operations are blocked. This will be included in [`Error::Blocked`].
pub block_reason: Option<String>,
/// maximum db size (in pages)
pub max_db_pages: u64,
pub heartbeat_url: Option<Url>,
pub bottomless_db_id: Option<String>,
pub jwt_key: Option<String>,
pub txn_timeout: Option<Duration>,
pub allow_attach: bool,
}
const fn default_max_size() -> u64 {
bytesize::ByteSize::pb(1000).as_u64() / LIBSQL_PAGE_SIZE
}
impl Default for DatabaseConfig {
fn default() -> Self {
Self {
block_reads: Default::default(),
block_writes: Default::default(),
block_reason: Default::default(),
max_db_pages: default_max_size(),
heartbeat_url: None,
bottomless_db_id: None,
jwt_key: None,
txn_timeout: Some(TXN_TIMEOUT),
allow_attach: false,
}
}
}
impl From<&metadata::DatabaseConfig> for DatabaseConfig {
fn from(value: &metadata::DatabaseConfig) -> Self {
DatabaseConfig {
block_reads: value.block_reads,
block_writes: value.block_writes,
block_reason: value.block_reason.clone(),
max_db_pages: value.max_db_pages,
heartbeat_url: value.heartbeat_url.as_ref().map(|s| Url::parse(s).unwrap()),
bottomless_db_id: value.bottomless_db_id.clone(),
jwt_key: value.jwt_key.clone(),
txn_timeout: value.txn_timeout_s.map(Duration::from_secs),
allow_attach: value.allow_attach,
}
}
}
impl From<&DatabaseConfig> for metadata::DatabaseConfig {
fn from(value: &DatabaseConfig) -> Self {
metadata::DatabaseConfig {
block_reads: value.block_reads,
block_writes: value.block_writes,
block_reason: value.block_reason.clone(),
max_db_pages: value.max_db_pages,
heartbeat_url: value.heartbeat_url.as_ref().map(|s| s.to_string()),
bottomless_db_id: value.bottomless_db_id.clone(),
jwt_key: value.jwt_key.clone(),
txn_timeout_s: value.txn_timeout.map(|d| d.as_secs()),
allow_attach: value.allow_attach,
}
}
}