feat(api): init rust rewrite

This commit is contained in:
spiral
2023-02-15 19:27:36 -05:00
parent 5da3c84bce
commit 5440386969
24 changed files with 2443 additions and 586 deletions

17
lib/libpk/Cargo.toml Normal file
View File

@@ -0,0 +1,17 @@
[package]
name = "libpk"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0.69"
config = "0.13.3"
gethostname = "0.4.1"
lazy_static = "1.4.0"
serde = "1.0.152"
tokio = { version = "1.25.0", features = ["full"] }
tracing = "0.1.37"
tracing-gelf = "0.7.1"
tracing-subscriber = { version = "0.3.16", features = ["env-filter"] }

50
lib/libpk/src/_config.rs Normal file
View File

@@ -0,0 +1,50 @@
use config::Config;
use lazy_static::lazy_static;
use serde::Deserialize;
use std::sync::Arc;
#[derive(Deserialize, Debug)]
pub struct DiscordConfig {
pub client_id: u32,
pub bot_token: String,
pub client_secret: String,
}
#[derive(Deserialize, Debug)]
pub struct DatabaseConfig {
pub(crate) _data_db_uri: String,
pub(crate) _messages_db_uri: String,
pub(crate) _db_password: Option<String>,
pub data_redis_addr: String,
}
fn _default_api_addr() -> String {
"0.0.0.0:5000".to_string()
}
#[derive(Deserialize, Debug)]
pub struct ApiConfig {
#[serde(default = "_default_api_addr")]
pub addr: String,
#[serde(default)]
pub ratelimit_redis_addr: Option<String>,
pub remote_url: String,
}
#[derive(Deserialize, Debug)]
pub struct PKConfig {
pub discord: DiscordConfig,
pub api: ApiConfig,
pub(crate) gelf_log_url: Option<String>,
}
lazy_static! {
#[derive(Debug)]
pub static ref CONFIG: Arc<PKConfig> = Arc::new(Config::builder()
.add_source(config::Environment::with_prefix("pluralkit").separator("__"))
.build().unwrap()
.try_deserialize::<PKConfig>().unwrap());
}

27
lib/libpk/src/lib.rs Normal file
View File

@@ -0,0 +1,27 @@
use gethostname::gethostname;
use tracing_subscriber::{prelude::__tracing_subscriber_SubscriberExt, EnvFilter, Registry};
mod _config;
pub use crate::_config::CONFIG as config;
pub fn init_logging(component: &str) -> anyhow::Result<()> {
let subscriber = Registry::default()
.with(EnvFilter::from_default_env())
.with(tracing_subscriber::fmt::layer());
if let Some(gelf_url) = &config.gelf_log_url {
let gelf_logger = tracing_gelf::Logger::builder()
.additional_field("component", component)
.additional_field("hostname", gethostname().to_str());
let mut conn_handle = gelf_logger
.init_udp_with_subscriber(gelf_url, subscriber)
.unwrap();
tokio::spawn(async move { conn_handle.connect().await });
} else {
// gelf_logger internally sets the global subscriber
tracing::subscriber::set_global_default(subscriber)
.expect("unable to set global subscriber");
}
Ok(())
}