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

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();
}
}