use std::{io::Cursor, time::Duration};
use constcat::concat;
use image::{ImageFormat, RgbaImage};
use serde_json::Value;
use crate::{
message::{Message, MessageGenerator},
token::{Token, TokenGenerator},
};
pub(crate) const MIN_SUPPORTED_VERSION: &'static str = "1.21.2";
pub(crate) const DEFAULT_DESC: &'static str = "Join to link your minecraft account";
pub(crate) const DEFAULT_LEGACY_DESC: &'static str =
concat!("Use a client newer than ", MIN_SUPPORTED_VERSION, "+");
pub(crate) const DEFAULT_ICON: &'static [u8] = include_bytes!("../icon.png");
#[derive(Debug, Clone)]
pub struct ServerConfig<T: TokenGenerator = Token, M: MessageGenerator = Message> {
pub port: u16,
pub token: T,
pub token_ttl: Duration,
pub message: M,
pub status: StatusConfig,
}
#[derive(Debug, Clone)]
pub struct StatusConfig {
pub favicon: Option<RgbaImage>,
pub description: Option<Value>,
pub legacy_decription: Option<String>,
}
impl Default for ServerConfig {
fn default() -> Self {
Self {
port: 25565,
token: Token,
token_ttl: Duration::from_secs(5 * 60),
message: Message,
status: StatusConfig::default(),
}
}
}
impl Default for StatusConfig {
fn default() -> Self {
Self {
favicon: Some(
image::load(Cursor::new(DEFAULT_ICON), ImageFormat::Png)
.unwrap()
.into_rgba8(),
),
description: Some(
serde_json::to_value(serde_json::json!({
"text": DEFAULT_DESC
}))
.unwrap(),
),
legacy_decription: Some(DEFAULT_LEGACY_DESC.to_string()),
}
}
}