feat: update SurrealDB dependency to version 3 and reflect changes in documentation
This commit is contained in:
parent
355e784628
commit
df719041dd
@ -18,7 +18,7 @@ forge-services = { path = "../../../lib/services" }
|
||||
forge-shared = { path = "../../../lib/shared" }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
serde_json = { workspace = true }
|
||||
surrealdb = { version = "2", default-features = false, features = ["protocol-http", "rustls"] }
|
||||
surrealdb = { version = "3", default-features = false, features = ["protocol-http", "rustls"] }
|
||||
tokio = { workspace = true }
|
||||
toml = "1.1.2"
|
||||
uuid = { workspace = true }
|
||||
|
||||
@ -4,6 +4,8 @@ The Forge server extension is the Rust backend for server-side game systems.
|
||||
It exposes domain commands through `arma-rs`, runs a shared Tokio runtime, and
|
||||
persists durable state through SurrealDB.
|
||||
|
||||
This extension build targets SurrealDB `3.x`.
|
||||
|
||||
## Responsibilities
|
||||
|
||||
- Register extension command groups for actor, bank, garage, locker, org,
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
use super::*;
|
||||
use serde_json::Value as JsonValue;
|
||||
|
||||
pub(super) fn surreal_select<T>(
|
||||
table: &'static str,
|
||||
@ -10,11 +11,17 @@ where
|
||||
{
|
||||
let id = id.to_string();
|
||||
RUNTIME.block_on(async move {
|
||||
surreal::client()
|
||||
let value: Option<JsonValue> = surreal::client()
|
||||
.await?
|
||||
.select((table, id.as_str()))
|
||||
.await
|
||||
.map_err(|error| format!("SurrealDB {} select failed: {}", label, error))
|
||||
.map_err(|error| format!("SurrealDB {} select failed: {}", label, error))?;
|
||||
value
|
||||
.map(|record| {
|
||||
serde_json::from_value(record)
|
||||
.map_err(|error| format!("SurrealDB {} decode failed: {}", label, error))
|
||||
})
|
||||
.transpose()
|
||||
})
|
||||
}
|
||||
|
||||
@ -23,11 +30,18 @@ where
|
||||
T: DeserializeOwned,
|
||||
{
|
||||
RUNTIME.block_on(async move {
|
||||
surreal::client()
|
||||
let values: Vec<JsonValue> = surreal::client()
|
||||
.await?
|
||||
.select(table)
|
||||
.await
|
||||
.map_err(|error| format!("SurrealDB {} select all failed: {}", label, error))
|
||||
.map_err(|error| format!("SurrealDB {} select all failed: {}", label, error))?;
|
||||
values
|
||||
.into_iter()
|
||||
.map(|record| {
|
||||
serde_json::from_value(record)
|
||||
.map_err(|error| format!("SurrealDB {} decode failed: {}", label, error))
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
}
|
||||
|
||||
@ -44,7 +58,7 @@ where
|
||||
let record = serde_json::to_value(record)
|
||||
.map_err(|error| format!("SurrealDB {} serialize failed: {}", label, error))?;
|
||||
RUNTIME.block_on(async move {
|
||||
let _: Option<T> = surreal::client()
|
||||
let _: Option<JsonValue> = surreal::client()
|
||||
.await?
|
||||
.upsert((table, id.as_str()))
|
||||
.content(record)
|
||||
@ -60,7 +74,7 @@ where
|
||||
{
|
||||
let id = id.to_string();
|
||||
RUNTIME.block_on(async move {
|
||||
let _: Option<T> = surreal::client()
|
||||
let _: Option<JsonValue> = surreal::client()
|
||||
.await?
|
||||
.delete((table, id.as_str()))
|
||||
.await
|
||||
@ -97,9 +111,16 @@ where
|
||||
.bind(("value", value))
|
||||
.await
|
||||
.map_err(|error| format!("SurrealDB {} select by field failed: {}", label, error))?;
|
||||
response
|
||||
let values: Vec<JsonValue> = response
|
||||
.take(0)
|
||||
.map_err(|error| format!("SurrealDB {} select by field failed: {}", label, error))
|
||||
.map_err(|error| format!("SurrealDB {} select by field failed: {}", label, error))?;
|
||||
values
|
||||
.into_iter()
|
||||
.map(|record| {
|
||||
serde_json::from_value(record)
|
||||
.map_err(|error| format!("SurrealDB {} decode failed: {}", label, error))
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -200,6 +200,7 @@ struct GarageUnlockRecord {
|
||||
uid: String,
|
||||
category: String,
|
||||
classname: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
source: Option<String>,
|
||||
}
|
||||
|
||||
|
||||
@ -189,6 +189,7 @@ struct LockerUnlockRecord {
|
||||
uid: String,
|
||||
category: String,
|
||||
classname: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
source: Option<String>,
|
||||
}
|
||||
|
||||
|
||||
@ -96,7 +96,7 @@ impl OrgRepository for OrgStorageRepository {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
||||
struct SurrealOrgRecord {
|
||||
#[serde(default)]
|
||||
org_id: String,
|
||||
|
||||
@ -109,8 +109,8 @@ async fn connect(config: SurrealConfig) -> Result<SurrealDb, String> {
|
||||
|
||||
if let (Some(username), Some(password)) = (&config.username, &config.password) {
|
||||
db.signin(Root {
|
||||
username: username.as_str(),
|
||||
password: password.as_str(),
|
||||
username: username.clone(),
|
||||
password: password.clone(),
|
||||
})
|
||||
.await
|
||||
.map_err(|error| error.to_string())?;
|
||||
|
||||
@ -4,6 +4,9 @@ Forge uses SurrealDB for durable storage. The Rust server extension connects to
|
||||
SurrealDB on startup and applies Forge schema modules automatically, so setup
|
||||
comes down to running a reachable database and matching the Forge config.
|
||||
|
||||
Forge currently targets the SurrealDB `3.x` server line. Do not pair this
|
||||
build of the extension with a `2.x` SurrealDB server.
|
||||
|
||||
## Choose the Right Path
|
||||
|
||||
### Developer or Server Operator
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user