pub mod mojang;
mod threadpool;
mod encryption;
#[macro_use]
pub mod macros {
#[macro_export]
macro_rules! map {
($($k:expr => $v:expr),+) => {
{
let mut map = HashMap::new();
$(map.insert($k, $v);)+
map
}
}
}
#[macro_export]
macro_rules! as_item {
($i:item) => {
$i
};
}
#[macro_export]
macro_rules! enumize {
($name: ident, $y: ty => {
$($na: ident, $lit: expr),*
}
) => {
$crate::as_item!{
#[derive(Clone, Copy, PartialEq)]
pub enum $name {
$($na),*,
}
}
impl $name {
pub fn get_all() -> Vec<$name> {
vec![$($name::$na),*,]
}
pub fn from(code: $y) -> Option<$name> where $y: PartialEq {
for n in $name::get_all() {
if n.get() == code {
return Some(n);
}
}
None
}
pub fn get(&self) -> $y {
match self {
$($name::$na => $lit),*
}
}
}
};
}
#[macro_export]
macro_rules! versions {
($name: ident, $y: ty => {
$($na: ident, $lit: expr, $fancy: literal),*
}
) => {
$crate::as_item!{
#[derive(Clone, Copy, PartialEq)]
#[allow(non_snake_case)]
pub enum $name {
$($na),*,
}
}
impl $name {
pub fn get_all() -> Vec<$name> {
vec![$($name::$na),*,]
}
pub fn from(code: $y) -> Option<$name> where $y: PartialEq {
for n in $name::get_all() {
if n.get_version_number() == code {
return Some(n);
}
}
None
}
pub fn get_version_number(&self) -> $y {
match self {
$($name::$na => $lit),*
}
}
pub fn get_fancy_name(&self) -> String {
match self {
$($name::$na => $fancy),*
}.to_string()
}
}
};
}
}