Skip to content

Commit be59717

Browse files
authored
Merge feature/cargo-optimizations into staging (#64)
add: Cargo.toml settings
1 parent 3b1db0c commit be59717

File tree

8 files changed

+117
-44
lines changed

8 files changed

+117
-44
lines changed

Cargo.toml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
[package]
22
name = "lum"
33
version = "0.2.1"
4+
authors = ["Torben Schweren"]
45
edition = "2021"
6+
rust-version = "1.80.0"
57
description = "Lum Discord Bot"
6-
license= "MIT"
78
readme = "README.md"
8-
authors = ["Torben Schweren"]
99
repository = "https://github.com/Kitt3120/lum"
10+
license= "MIT"
11+
keywords = ["chat", "discord", "bot", "framework"]
12+
categories = ["chat", "discord", "framework"]
1013

14+
[profile.release]
15+
debug = false
16+
opt-level = 3
17+
lto = true
1118

12-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
19+
[profile.dev]
20+
debug = true
21+
opt-level = 0
22+
lto = false
1323

1424
[dependencies]
1525
async-trait = "0.1.83"

rustfmt.toml

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/event/event.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ where
5050
S: Into<String>,
5151
{
5252
let (sender, receiver) = channel(buffer);
53-
let subscriber = Subscriber::new(name, log_on_error, remove_on_error, Callback::Channel(sender));
53+
let subscriber = Subscriber::new(
54+
name,
55+
log_on_error,
56+
remove_on_error,
57+
Callback::Channel(sender),
58+
);
5459

5560
let subscription = Subscription::from(&subscriber);
5661
let receiver_subscription = ReceiverSubscription::new(subscription, receiver);
@@ -116,9 +121,9 @@ where
116121
let subscription_to_remove = subscription.into();
117122

118123
let mut subscribers = self.subscribers.lock().await;
119-
let index = subscribers
120-
.iter()
121-
.position(|subscription_of_event| subscription_of_event.uuid == subscription_to_remove.uuid);
124+
let index = subscribers.iter().position(|subscription_of_event| {
125+
subscription_of_event.uuid == subscription_to_remove.uuid
126+
});
122127

123128
if let Some(index) = index {
124129
subscribers.remove(index);

src/event/subscriber.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,13 @@ where
6161

6262
pub async fn dispatch(&self, data: Arc<T>) -> Result<(), DispatchError<T>> {
6363
match &self.callback {
64-
Callback::Channel(sender) => sender.send(data).await.map_err(DispatchError::ChannelSend),
64+
Callback::Channel(sender) => {
65+
sender.send(data).await.map_err(DispatchError::ChannelSend)
66+
}
6567
Callback::Closure(closure) => closure(data).map_err(DispatchError::Closure),
66-
Callback::AsyncClosure(closure) => closure(data).await.map_err(DispatchError::AsyncClosure),
68+
Callback::AsyncClosure(closure) => {
69+
closure(data).await.map_err(DispatchError::AsyncClosure)
70+
}
6771
}
6872
}
6973
}

src/main.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ async fn main() {
2323
let config = match config_handler.load_config() {
2424
Ok(config) => config,
2525
Err(err) => {
26-
error!("Error reading config file: {}\n{} will exit.", err, BOT_NAME);
26+
error!(
27+
"Error reading config file: {}\n{} will exit.",
28+
err, BOT_NAME
29+
);
2730
return;
2831
}
2932
};
@@ -39,7 +42,10 @@ async fn main() {
3942

4043
fn setup_logger() {
4144
if let Err(error) = log::setup() {
42-
panic!("Error setting up the Logger: {}\n{} will exit.", error, BOT_NAME);
45+
panic!(
46+
"Error setting up the Logger: {}\n{} will exit.",
47+
error, BOT_NAME
48+
);
4349
}
4450
}
4551

src/service/discord.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,24 @@ impl Service for DiscordService {
7979
}
8080

8181
if self.data.set(Arc::clone(&client.data)).is_err() {
82-
error!("Could not set data OnceLock because it was already set. This should never happen.");
82+
error!(
83+
"Could not set data OnceLock because it was already set. This should never happen."
84+
);
8385
return Err("Could not set data OnceLock because it was already set.".into());
8486
}
8587

8688
if self.http.set(Arc::clone(&client.http)).is_err() {
87-
error!("Could not set http OnceLock because it was already set. This should never happen.");
89+
error!(
90+
"Could not set http OnceLock because it was already set. This should never happen."
91+
);
8892
return Err("Could not set http OnceLock because it was already set.".into());
8993
}
9094

91-
if self.shard_manager.set(Arc::clone(&client.shard_manager)).is_err() {
95+
if self
96+
.shard_manager
97+
.set(Arc::clone(&client.shard_manager))
98+
.is_err()
99+
{
92100
error!(
93101
"Could not set shard_manager OnceLock because it was already set. This should never happen."
94102
);
@@ -98,7 +106,9 @@ impl Service for DiscordService {
98106
if let Some(voice_manager) = &client.voice_manager {
99107
if self.voice_manager.set(Arc::clone(voice_manager)).is_err() {
100108
error!("Could not set voice_manager OnceLock because it was already set. This should never happen.");
101-
return Err("Could not set voice_manager OnceLock because it was already set.".into());
109+
return Err(
110+
"Could not set voice_manager OnceLock because it was already set.".into(),
111+
);
102112
}
103113
} else {
104114
warn!("Voice manager is not available");
@@ -153,7 +163,10 @@ struct EventHandler {
153163

154164
impl EventHandler {
155165
pub fn new(client: Arc<OnceLock<Ready>>, ready_notify: Arc<Notify>) -> Self {
156-
Self { client, ready_notify }
166+
Self {
167+
client,
168+
ready_notify,
169+
}
157170
}
158171
}
159172

src/service/service_manager.rs

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ use super::{
22
service::Service,
33
types::{OverallStatus, Priority, ShutdownError, StartupError, Status},
44
};
5-
use crate::{
6-
event::EventRepeater, service::Watchdog
7-
};
5+
use crate::{event::EventRepeater, service::Watchdog};
86
use log::{error, info, warn};
9-
use std::{collections::HashMap, fmt::{self, Display}, mem, sync::{Arc, OnceLock, Weak}, time::Duration};
7+
use std::{
8+
collections::HashMap,
9+
fmt::{self, Display},
10+
mem,
11+
sync::{Arc, OnceLock, Weak},
12+
time::Duration,
13+
};
1014
use tokio::{
1115
spawn,
1216
sync::{Mutex, MutexGuard},
@@ -20,8 +24,10 @@ pub struct ServiceManagerBuilder {
2024
}
2125

2226
impl ServiceManagerBuilder {
23-
pub fn new() -> Self {
24-
Self { services: Vec::new() }
27+
pub fn new() -> Self {
28+
Self {
29+
services: Vec::new(),
30+
}
2531
}
2632

2733
//TODO: When Rust allows async closures, refactor this to use iterator methods instead of for loop
@@ -65,8 +71,8 @@ pub fn new() -> Self {
6571

6672
let result = arc.weak.set(weak);
6773
if result.is_err() {
68-
error!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set. This should never happen. Shutting down ungracefully to prevent further undefined behavior.");
69-
unreachable!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set.");
74+
error!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set. This should never happen. Shutting down ungracefully to prevent further undefined behavior.");
75+
unreachable!("Unable to set ServiceManager's Weak self-reference in ServiceManagerBuilder because it was already set.");
7076
}
7177

7278
arc
@@ -86,8 +92,7 @@ impl ServiceManager {
8692
ServiceManagerBuilder::new()
8793
}
8894

89-
pub async fn manages_service(&self, service_id: &str) -> bool
90-
{
95+
pub async fn manages_service(&self, service_id: &str) -> bool {
9196
for service in self.services.iter() {
9297
let service_lock = service.lock().await;
9398

@@ -99,7 +104,10 @@ impl ServiceManager {
99104
false
100105
}
101106

102-
pub async fn start_service(&self, service: Arc<Mutex<dyn Service>>) -> Result<(), StartupError> {
107+
pub async fn start_service(
108+
&self,
109+
service: Arc<Mutex<dyn Service>>,
110+
) -> Result<(), StartupError> {
103111
let service_id = service.lock().await.info().id.clone();
104112
if !self.manages_service(&service_id).await {
105113
return Err(StartupError::ServiceNotManaged(service_id.clone()));
@@ -113,13 +121,18 @@ impl ServiceManager {
113121
}
114122

115123
if self.has_background_task_registered(&service_id).await {
116-
return Err(StartupError::BackgroundTaskAlreadyRunning(service_id.clone()));
124+
return Err(StartupError::BackgroundTaskAlreadyRunning(
125+
service_id.clone(),
126+
));
117127
}
118128

119129
let service_status_event = service_lock.info().status.as_ref();
120130
let attachment_result = self.on_status_change.attach(service_status_event, 2).await;
121131
if let Err(err) = attachment_result {
122-
return Err(StartupError::StatusAttachmentFailed(service_id.clone(), err));
132+
return Err(StartupError::StatusAttachmentFailed(
133+
service_id.clone(),
134+
err,
135+
));
123136
}
124137

125138
service_lock.info().status.set(Status::Starting).await;
@@ -133,7 +146,10 @@ impl ServiceManager {
133146
}
134147

135148
//TODO: Clean up
136-
pub async fn stop_service(&self, service: Arc<Mutex<dyn Service>>) -> Result<(), ShutdownError> {
149+
pub async fn stop_service(
150+
&self,
151+
service: Arc<Mutex<dyn Service>>,
152+
) -> Result<(), ShutdownError> {
137153
let service_id = service.lock().await.info().id.clone();
138154
if !(self.manages_service(&service_id).await) {
139155
return Err(ShutdownError::ServiceNotManaged(service_id.clone()));
@@ -155,7 +171,10 @@ impl ServiceManager {
155171
let service_status_event = service_lock.info().status.as_ref();
156172
let detach_result = self.on_status_change.detach(service_status_event).await;
157173
if let Err(err) = detach_result {
158-
return Err(ShutdownError::StatusDetachmentFailed(service_id.clone(), err));
174+
return Err(ShutdownError::StatusDetachmentFailed(
175+
service_id.clone(),
176+
err,
177+
));
159178
}
160179

161180
info!("Stopped service {}", service_lock.info().name);
@@ -305,7 +324,7 @@ impl ServiceManager {
305324
.map(|line| line.len())
306325
.max()
307326
.unwrap_or(0);
308-
327+
309328
let mut headline = String::from("Status overview\n");
310329
headline.push_str("─".repeat(longest_width).as_str());
311330
headline.push('\n');
@@ -322,7 +341,10 @@ impl ServiceManager {
322341
Some(weak) => weak,
323342
None => {
324343
error!("ServiceManager's Weak self-reference was None while initializing service {}. This should never happen. Did you not use a ServiceManagerBuilder? Shutting down ungracefully to prevent further undefined behavior.", service.info().name);
325-
unreachable!("ServiceManager's Weak self-reference was None while initializing service {}.", service.info().name);
344+
unreachable!(
345+
"ServiceManager's Weak self-reference was None while initializing service {}.",
346+
service.info().name
347+
);
326348
}
327349
};
328350

@@ -335,7 +357,6 @@ impl ServiceManager {
335357
}
336358
};
337359

338-
339360
//TODO: Add to config instead of hardcoding duration
340361
let start = service.start(arc);
341362
let timeout_result = timeout(Duration::from_secs(10), start).await;
@@ -351,7 +372,9 @@ impl ServiceManager {
351372
.status
352373
.set(Status::FailedToStart(error.to_string()))
353374
.await;
354-
return Err(StartupError::FailedToStartService(service.info().id.clone()));
375+
return Err(StartupError::FailedToStartService(
376+
service.info().id.clone(),
377+
));
355378
}
356379
},
357380
Err(error) => {
@@ -360,7 +383,9 @@ impl ServiceManager {
360383
.status
361384
.set(Status::FailedToStart(error.to_string()))
362385
.await;
363-
return Err(StartupError::FailedToStartService(service.info().id.clone()));
386+
return Err(StartupError::FailedToStartService(
387+
service.info().id.clone(),
388+
));
364389
}
365390
}
366391

@@ -386,7 +411,9 @@ impl ServiceManager {
386411
.status
387412
.set(Status::FailedToStop(error.to_string()))
388413
.await;
389-
return Err(ShutdownError::FailedToStopService(service.info().id.clone()));
414+
return Err(ShutdownError::FailedToStopService(
415+
service.info().id.clone(),
416+
));
390417
}
391418
},
392419
Err(error) => {
@@ -395,7 +422,9 @@ impl ServiceManager {
395422
.status
396423
.set(Status::FailedToStop(error.to_string()))
397424
.await;
398-
return Err(ShutdownError::FailedToStopService(service.info().id.clone()));
425+
return Err(ShutdownError::FailedToStopService(
426+
service.info().id.clone(),
427+
));
399428
}
400429
}
401430

@@ -412,7 +441,10 @@ impl ServiceManager {
412441
service_lock: &MutexGuard<'_, dyn Service>,
413442
service: Arc<Mutex<dyn Service>>,
414443
) {
415-
if self.has_background_task_registered(&service_lock.info().id).await {
444+
if self
445+
.has_background_task_registered(&service_lock.info().id)
446+
.await
447+
{
416448
return;
417449
}
418450

@@ -433,14 +465,14 @@ impl ServiceManager {
433465
"Background task of service {} ended unexpectedly! Service will be marked as failed.",
434466
service.info().name
435467
);
436-
468+
437469
service
438470
.info()
439471
.status
440472
.set(Status::RuntimeError("Background task ended unexpectedly!".to_string()))
441473
.await;
442474
}
443-
475+
444476
Err(error) => {
445477
error!(
446478
"Background task of service {} ended with error: {}. Service will be marked as failed.",
@@ -470,7 +502,10 @@ impl ServiceManager {
470502
}
471503

472504
async fn stop_background_task(&self, service_lock: &MutexGuard<'_, dyn Service>) {
473-
if !self.has_background_task_registered(&service_lock.info().id).await {
505+
if !self
506+
.has_background_task_registered(&service_lock.info().id)
507+
.await
508+
{
474509
return;
475510
}
476511

src/service/types.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ pub type PinnedBoxedFuture<T> = Pin<Box<dyn Future<Output = T> + Send + Sync>>;
1515
pub type PinnedBoxedFutureResult<T> = PinnedBoxedFuture<Result<T, BoxedError>>;
1616

1717
pub type LifetimedPinnedBoxedFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + Sync + 'a>>;
18-
pub type LifetimedPinnedBoxedFutureResult<'a, T> = LifetimedPinnedBoxedFuture<'a, Result<T, BoxedError>>;
18+
pub type LifetimedPinnedBoxedFutureResult<'a, T> =
19+
LifetimedPinnedBoxedFuture<'a, Result<T, BoxedError>>;
1920

2021
#[derive(Debug, Clone)]
2122
pub enum Status {

0 commit comments

Comments
 (0)