Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions agdb/src/type_def.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,34 @@ impl<T: TypeDefinition, V: TypeDefinition> TypeDefinition for (T, V) {
}
}

impl<T: TypeDefinition> TypeDefinition for std::sync::Arc<T> {
fn type_def() -> Type {
Type::Pointer(Pointer {
kind: PointerKind::Arc,
ty: T::type_def,
})
}
}

impl<const N: usize, T: TypeDefinition> TypeDefinition for [T; N] {
fn type_def() -> Type {
Type::Slice(T::type_def)
}
}

impl TypeDefinition for std::path::PathBuf {
fn type_def() -> Type {
Type::Struct(Struct {
name: "PathBuf",
generics: &[],
fields: &[Variable {
name: "inner",
ty: Some(|| Type::Vec(u8::type_def)),
}],
})
}
}

macro_rules! impl_type_def_fn_ptr {
($(($($arg:ident),*)),* $(,)?) => {
$(
Expand Down
3 changes: 3 additions & 0 deletions agdb_api/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@ categories = ["database", "api-bindings"]
default = []
tls = ["reqwest/default-tls"]
api = ["agdb/api"]
test_server = ["dep:tokio"]
Comment thread
michaelvlach marked this conversation as resolved.

[dependencies]
agdb = { version = "0.12.10", path = "../../agdb", features = ["serde", "openapi"] }
reqwest = { version = "0.13", default-features = false, features = ["charset", "http2", "json"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
utoipa = "5"
tokio = { version = "1", features = ["full"], optional = true }

2 changes: 2 additions & 0 deletions agdb_api/rust/src/api_types.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
pub mod config_impl;

use agdb::DbError;
use agdb::DbSerialize;
use agdb::DbValue;
Expand Down
72 changes: 72 additions & 0 deletions agdb_api/rust/src/api_types/config_impl.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
use crate::LogLevelFilter;

pub const SALT_LEN: usize = 16;
pub const DEFAULT_LOG_BODY_LIMIT: u64 = 10 * 1024;
pub const DEFAULT_REQUEST_BODY_LIMIT: u64 = 10 * 1024 * 1024;

#[derive(Debug)]
#[cfg_attr(feature = "api", derive(agdb::TypeDefImpl))]
pub struct ConfigImpl {
pub bind: String,
pub address: String,
pub basepath: String,
pub static_roots: Vec<String>,
pub admin: String,
pub log_level: LogLevelFilter,
pub log_body_limit: u64,
pub request_body_limit: u64,
pub data_dir: String,
pub pepper_path: String,
pub tls_certificate: String,
pub tls_key: String,
pub tls_root: String,
pub cluster_token: String,
pub cluster_heartbeat_timeout_ms: u64,
pub cluster_term_timeout_ms: u64,
pub cluster: Vec<String>,
pub cluster_node_id: usize,
pub start_time: u64,
pub pepper: Option<[u8; SALT_LEN]>,
}

impl ConfigImpl {
pub fn server_url(&self) -> String {
format!("{}{}", self.address, self.basepath)
}
}

#[cfg_attr(feature = "api", agdb::fn_def())]
pub fn config_to_str(config: &ConfigImpl) -> String {
let mut buffer = String::new();
buffer.push_str(&format!("bind: {}\n", config.bind));
buffer.push_str(&format!("address: {}\n", config.address));
buffer.push_str(&format!("basepath: {}\n", config.basepath));
buffer.push_str(&format!(
"static_roots: {}\n",
config.static_roots.join(", ")
));
buffer.push_str(&format!("admin: {}\n", config.admin));
buffer.push_str(&format!("log_level: {}\n", config.log_level));
buffer.push_str(&format!("log_body_limit: {}\n", config.log_body_limit));
buffer.push_str(&format!(
"request_body_limit: {}\n",
config.request_body_limit
));
buffer.push_str(&format!("data_dir: {}\n", config.data_dir));
buffer.push_str(&format!("pepper_path: {}\n", config.pepper_path));
buffer.push_str(&format!("tls_certificate: {}\n", config.tls_certificate));
buffer.push_str(&format!("tls_key: {}\n", config.tls_key));
buffer.push_str(&format!("tls_root: {}\n", config.tls_root));
buffer.push_str(&format!("cluster_token: {}\n", config.cluster_token));

buffer.push_str(&format!(
"cluster_heartbeat_timeout_ms: {}\n",
config.cluster_heartbeat_timeout_ms
));
buffer.push_str(&format!(
"cluster_term_timeout_ms: {}\n",
config.cluster_term_timeout_ms
));
buffer.push_str(&format!("cluster: [{}]\n", config.cluster.join(", ")));
buffer
}
3 changes: 3 additions & 0 deletions agdb_api/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ mod api_result;
mod api_types;
mod client;
mod http_client;
#[cfg(feature = "test_server")]
pub mod test_server;

pub use api_error::AgdbApiError;
pub use api_result::AgdbApiResult;
Expand All @@ -24,6 +26,7 @@ pub use api_types::ServerDatabase;
pub use api_types::UserCredentials;
pub use api_types::UserLogin;
pub use api_types::UserStatus;
pub use api_types::config_impl;
pub use client::AgdbApi;
pub use http_client::HttpClient;
pub use http_client::ReqwestClient;
Expand Down
Loading