Move hash function into utils module, replace .to_string() calls with s!() macro

This commit is contained in:
Agatha Lovelace 2020-06-23 00:07:01 +03:00
parent 034da120ac
commit eb77c2ca37
No known key found for this signature in database
GPG Key ID: 2DB18BA2E0A80BC3
2 changed files with 34 additions and 28 deletions

View File

@ -23,10 +23,12 @@ use serenity::{
}, },
prelude::*, prelude::*,
}; };
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use std::{env, process, sync::Arc}; use std::{env, process, sync::Arc};
#[macro_use]
mod utils;
use utils::*;
struct Handler; struct Handler;
struct ShardManagerContainer; struct ShardManagerContainer;
@ -74,12 +76,6 @@ lazy_static! {
vec![UserId(254310746450690048), UserId(687740609703706630)]; vec![UserId(254310746450690048), UserId(687740609703706630)];
} }
// Calculates hash of a type that implements Hash
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
fn main() { fn main() {
let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("Invalid token"), Handler) let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("Invalid token"), Handler)
@ -111,7 +107,7 @@ fn main() {
"{}", "{}",
format!( format!(
"Rate limited in {} with message {}", "Rate limited in {} with message {}",
msg.channel_id.to_string().purple().bold(), s!(msg.channel_id).purple().bold(),
msg.content.purple() msg.content.purple()
) )
); );
@ -181,7 +177,7 @@ fn ping(ctx: &mut Context, message: &Message) -> CommandResult {
Some(v) => v, Some(v) => v,
None => { None => {
return Err(CommandError( return Err(CommandError(
"There was a problem getting the shard manager!".to_string(), s!("There was a problem getting the shard manager!"),
)) ))
} }
}; };
@ -191,12 +187,12 @@ fn ping(ctx: &mut Context, message: &Message) -> CommandResult {
let runner = match runners.get(&ShardId(ctx.shard_id)) { let runner = match runners.get(&ShardId(ctx.shard_id)) {
Some(v) => v, Some(v) => v,
None => return Err(CommandError("No shard found!".to_string())), None => return Err(CommandError(s!("No shard found!"))),
}; };
let ping = match runner.latency { let ping = match runner.latency {
Some(v) => v.as_millis(), Some(v) => v.as_millis(),
None => return Err(CommandError("Could not get latency!".to_string())), None => return Err(CommandError(s!("Could not get latency!"))),
}; };
let _ = message let _ = message
@ -211,7 +207,7 @@ fn ping(ctx: &mut Context, message: &Message) -> CommandResult {
fn echo(ctx: &mut Context, message: &Message, args: Args) -> CommandResult { fn echo(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
let input: String = args.rest().trim().to_string(); let input: String = args.rest().trim().to_string();
if args.is_empty() { if args.is_empty() {
return Err(CommandError("Called without input".to_string())); return Err(CommandError(s!("Called without input")));
} }
let _ = message.channel_id.say(&ctx.http, input); let _ = message.channel_id.say(&ctx.http, input);
@ -239,7 +235,7 @@ fn status(ctx: &mut Context, message: &Message, mut args: Args) -> CommandResult
use serenity::model::gateway::Activity; use serenity::model::gateway::Activity;
if args.is_empty() { if args.is_empty() {
return Err(CommandError("Called without args!".to_string())); return Err(CommandError(s!("Called without args!")));
} }
let mut input = args.single::<String>()?; let mut input = args.single::<String>()?;
@ -294,7 +290,7 @@ fn host(ctx: &mut Context, message: &Message) -> CommandResult {
host = sys_info::hostname()?, host = sys_info::hostname()?,
release = sys_info::linux_os_release()? release = sys_info::linux_os_release()?
.pretty_name .pretty_name
.unwrap_or_else(|| "Unknown".to_string()), .unwrap_or_else(|| s!("Unknown")),
cpu = sys_info::cpu_speed()? cpu = sys_info::cpu_speed()?
), ),
); );
@ -323,7 +319,7 @@ fn embed(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
} }
// print documentation from src/embed-docs.txt // print documentation from src/embed-docs.txt
if &args.rest().trim().to_string() == "help" { if s!(&args.rest().trim()) == "help" {
let mut file = fs::File::open("./src/embed-docs.txt")?; let mut file = fs::File::open("./src/embed-docs.txt")?;
let mut help_string = String::new(); let mut help_string = String::new();
file.read_to_string(&mut help_string)?; file.read_to_string(&mut help_string)?;
@ -470,7 +466,7 @@ fn ship(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
// Concatenate names together // Concatenate names together
let shipname: Result<String, String> = match names.len() { let shipname: Result<String, String> = match names.len() {
0 => Err("Invalid input!".to_string()), 0 => Err(s!("Invalid input!")),
1 => Ok(names[0].clone()), 1 => Ok(names[0].clone()),
_ => { _ => {
let mut first_halves = String::new(); let mut first_halves = String::new();
@ -510,7 +506,7 @@ fn headpat(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
let args = args.rest().trim(); let args = args.rest().trim();
if args.is_empty() { if args.is_empty() {
return Err(CommandError("Please specify a username!".to_string())); return Err(CommandError(s!("Please specify a username!")));
} }
// Get username from first mention, otherwise use input text // Get username from first mention, otherwise use input text
@ -643,7 +639,7 @@ fn help(ctx: &mut Context, message: &Message) -> CommandResult {
#[command] #[command]
fn info(ctx: &mut Context, message: &Message, args: Args) -> CommandResult { fn info(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
if !args.is_empty() { if !args.is_empty() {
return Err(CommandError("Called with args!".to_string())); return Err(CommandError(s!("Called with args!")));
} }
let num = ctx.cache.read().guilds.len(); let num = ctx.cache.read().guilds.len();
@ -673,7 +669,7 @@ fn define(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
if !args.is_empty() { if !args.is_empty() {
match defs { match defs {
Err(_e) => { Err(_e) => {
return Err(CommandError("Invalid query >w<".to_string())); return Err(CommandError(s!("Invalid query >w<")));
} }
Ok(v) => { Ok(v) => {
if !v.is_empty() { if !v.is_empty() {
@ -690,7 +686,7 @@ fn define(ctx: &mut Context, message: &Message, args: Args) -> CommandResult {
}) })
}); });
} else { } else {
return Err(CommandError("No results!".to_string())); return Err(CommandError(s!("No results!")));
} }
} }
} }
@ -709,7 +705,7 @@ fn pfp(ctx: &mut Context, message: &Message) -> CommandResult {
let pfp = match user.avatar_url() { let pfp = match user.avatar_url() {
Some(v) => v, Some(v) => v,
None => return Err(CommandError("The user does not have an avatar".to_string())), None => return Err(CommandError(s!("The user does not have an avatar"))),
}; };
let _ = message.channel_id.send_message(&ctx.http, |m| { let _ = message.channel_id.send_message(&ctx.http, |m| {
@ -741,13 +737,13 @@ fn desc(ctx: &mut Context, message: &Message) -> CommandResult {
let channel_lock = match message.channel(&ctx) { let channel_lock = match message.channel(&ctx) {
Some(ch) => ch, Some(ch) => ch,
None => { None => {
return Err(CommandError("Could not get channel!".to_string())); return Err(CommandError(s!("Could not get channel!")));
} }
}; };
let channel_lock = match channel_lock.guild() { let channel_lock = match channel_lock.guild() {
Some(g) => g, Some(g) => g,
None => { None => {
return Err(CommandError("Could not get guild!".to_string())); return Err(CommandError(s!("Could not get guild!")));
} }
}; };
let channel = channel_lock.read(); let channel = channel_lock.read();
@ -786,15 +782,15 @@ fn pinned(ctx: &mut Context, message: &Message, mut args: Args) -> CommandResult
Ok(v) => v, Ok(v) => v,
Err(e) => { Err(e) => {
return Err(CommandError( return Err(CommandError(
format!("Could not get pinned messages! Error: {}", e).to_string(), s!(format!("Could not get pinned messages! Error: {}", e)),
)); ));
} }
}; };
if pinned.is_empty() { if pinned.is_empty() {
return Err(CommandError("No pinned messages found!".to_string())); return Err(CommandError(s!("No pinned messages found!")));
} }
if idx > pinned.len() - 1 { if idx > pinned.len() - 1 {
return Err(CommandError("Index out of bounds!".to_string())); return Err(CommandError(s!("Index out of bounds!")));
} }
let _ = message.channel_id.send_message(&ctx.http, |m| { let _ = message.channel_id.send_message(&ctx.http, |m| {
@ -826,7 +822,7 @@ fn brainfuck(ctx: &mut Context, message: &Message, args: Args) -> CommandResult
let input = match args.rest().trim() { let input = match args.rest().trim() {
"" => { "" => {
return Err(CommandError("Called without input!".to_string())); return Err(CommandError(s!("Called without input!")));
} }
v @ _ => v, v @ _ => v,
}; };

10
src/utils.rs Normal file
View File

@ -0,0 +1,10 @@
use std::{collections::hash_map::DefaultHasher, hash::{Hasher, Hash}};
macro_rules!s( ( $e:expr ) => ( ($e).to_string() ) );
// Calculates hash of a type that implements Hash
pub fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}