You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.8 KiB
81 lines
1.8 KiB
use std::net::SocketAddr;
|
|
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)]
|
|
pub struct ServerProperties {
|
|
#[serde(default = "default_name")]
|
|
pub name: String,
|
|
#[serde(default = "default_addr")]
|
|
pub addr: SocketAddr,
|
|
#[serde(default = "default_logger")]
|
|
pub logger: String,
|
|
#[serde(alias = "$schema", default = "default_schema")]
|
|
schema: String,
|
|
}
|
|
|
|
impl ServerProperties {
|
|
pub fn load() -> Self {
|
|
serde_json::from_str(&match std::fs::read_to_string("properties.json") {
|
|
Ok(v) => v,
|
|
Err(e) => {
|
|
println!("properties.json parsing error: {}", e);
|
|
std::process::exit(1)
|
|
}
|
|
})
|
|
.unwrap()
|
|
}
|
|
}
|
|
|
|
impl Default for ServerProperties {
|
|
fn default() -> Self {
|
|
Self {
|
|
name: default_name(),
|
|
addr: default_addr(),
|
|
logger: default_logger(),
|
|
schema: default_schema(),
|
|
}
|
|
}
|
|
}
|
|
|
|
fn default_logger() -> String {
|
|
"barebones".into()
|
|
}
|
|
|
|
fn default_addr() -> SocketAddr {
|
|
"0.0.0.0:50052".parse().unwrap()
|
|
}
|
|
|
|
fn default_name() -> String {
|
|
"Spah's sappin' mah sentreh".into()
|
|
}
|
|
|
|
fn default_schema() -> String {
|
|
"https://theperkinrex.duckdns.org/CardsSimulator/cards-simulator/raw/branch/main/server/schema/server-properties.json".into()
|
|
}
|
|
|
|
pub fn setup() {
|
|
if cfg!(debug_assertions) {
|
|
if let Ok(e) = std::env::var("CARGO_MANIFEST_DIR") {
|
|
std::fs::write(
|
|
AsRef::<std::path::Path>::as_ref(&e)
|
|
.join("schema")
|
|
.join("server-properties.json"),
|
|
serde_json::to_string_pretty(&schemars::schema_for!(ServerProperties)).unwrap(),
|
|
)
|
|
.unwrap()
|
|
}
|
|
}
|
|
if !std::path::PathBuf::from("properties.json").exists() {
|
|
std::fs::write(
|
|
"properties.json",
|
|
serde_json::to_string_pretty(&ServerProperties::default()).unwrap(),
|
|
)
|
|
.unwrap();
|
|
}
|
|
|
|
if !std::path::PathBuf::from("games").exists() {
|
|
std::fs::create_dir("games").unwrap();
|
|
}
|
|
}
|
|
|