diff --git a/Cargo.toml b/Cargo.toml index c3cb7c56122f0ce0fb0afccbccf1819d2de0d706..7cee41468f039b559510392b890639b3b9e9cbbd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -188,47 +188,52 @@ codegen-units=1 workspace = true [workspace.lints.rust] -# missing_abi = "warn" +missing_abi = "warn" # missing_docs = "warn" -# noop_method_call = "warn" -# pointer_structural_match = "warn" +noop_method_call = "warn" +pointer_structural_match = "warn" # unreachable_pub = "warn" -# unused_extern_crates = "warn" -# unused_import_braces = "warn" +unused_extern_crates = "warn" +unused_import_braces = "warn" # unused_lifetimes = "warn" unused_qualifications = "warn" -# unused_tuple_struct_fields = "warn" +unused_tuple_struct_fields = "warn" [workspace.lints.clippy] suspicious = "warn" # assume deny in practice perf = "warn" # assume deny in practice -# redundant_clone = "warn" -# cloned_instead_of_copied = "warn" +redundant_clone = "warn" +cloned_instead_of_copied = "warn" expl_impl_clone_on_copy = "warn" # pedantic = "warn" -# as_conversions = "warn" +unnecessary_cast = "warn" +cast_lossless = "warn" +ptr_as_ptr = "warn" +ref_to_mut = "warn" +char_lit_as_u8 = "warn" dbg_macro = "warn" -# empty_structs_with_brackets = "warn" +empty_structs_with_brackets = "warn" # get_unwrap = "warn" # if_then_some_else_none = "warn" # let_underscore_must_use = "warn" # map_err_ignore = "warn" # missing_docs_in_private_items = "warn" -# negative_feature_names = "warn" -# pub_without_shorthand = "warn" +negative_feature_names = "warn" +pub_without_shorthand = "warn" rc_buffer = "warn" rc_mutex = "warn" -# redundant_feature_names = "warn" -# redundant_type_annotations = "warn" +redundant_feature_names = "warn" +redundant_type_annotations = "warn" # ref_patterns = "warn" -# rest_pat_in_fully_bound_structs = "warn" -# str_to_string = "warn" +rest_pat_in_fully_bound_structs = "warn" +str_to_string = "warn" # string_add = "warn" # string_slice = "warn" # string_to_string = "warn" tests_outside_test_module = "warn" undocumented_unsafe_blocks = "warn" -# unneeded_field_pattern = "warn" -# unseparated_literal_suffix = "warn" +unneeded_field_pattern = "warn" +unseparated_literal_suffix = "warn" # unwrap_used = "warn" -# wildcard_dependencies = "warn" \ No newline at end of file +# expect_used = "warn" +wildcard_dependencies = "warn" \ No newline at end of file diff --git a/src/api/client_server/media.rs b/src/api/client_server/media.rs index 2c34a24ec0f59986d4394aac22f60c24e672be02..d114cf671e3a143bff02a924c834e48ec523daba 100644 --- a/src/api/client_server/media.rs +++ b/src/api/client_server/media.rs @@ -132,9 +132,7 @@ pub async fn get_content_as_filename_route( let mxc = format!("mxc://{}/{}", body.server_name, body.media_id); if let Some(FileMeta { - content_disposition: _, - content_type, - file, + content_type, file, .. }) = services().media.get(mxc.clone()).await? { Ok(get_content_as_filename::v3::Response { diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index 5c297948746ec01ee8f19849e984a753b041ca65..df7980fffc976e5a8fbdd5d83d5175a3a38873d8 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -1221,7 +1221,7 @@ fn validate_and_add_event_id( Ok((event_id, value)) } -pub(crate) async fn invite_helper<'a>( +pub(crate) async fn invite_helper( sender_user: &UserId, user_id: &UserId, room_id: &RoomId, diff --git a/src/api/client_server/report.rs b/src/api/client_server/report.rs index 19b76c49ffa33f67c4b321882386c5de64b76945..412590ba5bccf92ce9cd1cce44e4e4b739fd4da9 100644 --- a/src/api/client_server/report.rs +++ b/src/api/client_server/report.rs @@ -41,7 +41,7 @@ pub async fn report_event_route( services().admin .send_message(message::RoomMessageEventContent::text_html( format!( - "Report received from: {}\n\n\ + "@room Report received from: {}\n\n\ Event ID: {:?}\n\ Room ID: {:?}\n\ Sent By: {:?}\n\n\ diff --git a/src/api/server_server.rs b/src/api/server_server.rs index cbd511b7be2f23c32efaad0d3955092d5fefa7c2..1570b54161fbe4f43da7cce85daf6eea53cfe98a 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -95,7 +95,7 @@ fn into_https_string(self) -> String { fn into_uri_string(self) -> String { match self { Self::Literal(addr) => addr.to_string(), - Self::Named(host, ref port) => host + port, + Self::Named(host, port) => host + &port, } } diff --git a/src/config/mod.rs b/src/config/mod.rs index d1550728bce33636012beab67e9f85684e4867cb..567870a8bcfc4a650b34614548ee65ef2fd805d5 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -218,10 +218,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { "Allow device name federation", &self.allow_device_name_federation.to_string(), ), - ( - "Notification push path", - &self.notification_push_path.to_string(), - ), + ("Notification push path", &self.notification_push_path), ("Allow room creation", &self.allow_room_creation.to_string()), ( "Allow public room directory over federation", @@ -280,10 +277,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { "zstd Response Body Compression", &self.zstd_compression.to_string(), ), - ( - "RocksDB database log level", - &self.rocksdb_log_level.to_string(), - ), + ("RocksDB database log level", &self.rocksdb_log_level), ( "RocksDB database log time-to-roll", &self.rocksdb_log_time_to_roll.to_string(), @@ -393,11 +387,11 @@ fn default_rocksdb_log_time_to_roll() -> usize { } // I know, it's a great name -pub fn default_default_room_version() -> RoomVersionId { +pub(crate) fn default_default_room_version() -> RoomVersionId { RoomVersionId::V10 } -pub fn default_rocksdb_max_log_file_size() -> usize { +fn default_rocksdb_max_log_file_size() -> usize { // 4 megabytes 4 * 1024 * 1024 } diff --git a/src/config/proxy.rs b/src/config/proxy.rs index 28ffada4b309f9cfdd3431d44bb5c42558f4c2f1..715d59f2ae2bd03743fd307bd7c297f220ca0f7b 100644 --- a/src/config/proxy.rs +++ b/src/config/proxy.rs @@ -95,20 +95,20 @@ pub fn for_url(&self, url: &Url) -> Option<&Url> { /// A domain name, that optionally allows a * as its first subdomain. #[derive(Clone, Debug)] -pub enum WildCardedDomain { +enum WildCardedDomain { WildCard, WildCarded(String), Exact(String), } impl WildCardedDomain { - pub fn matches(&self, domain: &str) -> bool { + fn matches(&self, domain: &str) -> bool { match self { WildCardedDomain::WildCard => true, WildCardedDomain::WildCarded(d) => domain.ends_with(d), WildCardedDomain::Exact(d) => domain == d, } } - pub fn more_specific_than(&self, other: &Self) -> bool { + fn more_specific_than(&self, other: &Self) -> bool { match (self, other) { (WildCardedDomain::WildCard, WildCardedDomain::WildCard) => false, (_, WildCardedDomain::WildCard) => true, diff --git a/src/database/abstraction.rs b/src/database/abstraction.rs index 83e8231484bbfbcc4dd6eaae2bb0f6be2bce9af4..5056de8f069547eb9f015daf944a0de843368283 100644 --- a/src/database/abstraction.rs +++ b/src/database/abstraction.rs @@ -7,12 +7,12 @@ pub mod sqlite; #[cfg(feature = "rocksdb")] -pub mod rocksdb; +pub(crate) mod rocksdb; #[cfg(any(feature = "sqlite", feature = "rocksdb"))] -pub mod watchers; +pub(crate) mod watchers; -pub trait KeyValueDatabaseEngine: Send + Sync { +pub(crate) trait KeyValueDatabaseEngine: Send + Sync { fn open(config: &Config) -> Result<Self> where Self: Sized; @@ -27,7 +27,7 @@ fn memory_usage(&self) -> Result<String> { fn clear_caches(&self) {} } -pub trait KvTree: Send + Sync { +pub(crate) trait KvTree: Send + Sync { fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>>; fn insert(&self, key: &[u8], value: &[u8]) -> Result<()>; diff --git a/src/database/abstraction/rocksdb.rs b/src/database/abstraction/rocksdb.rs index 47203f0872985cca106db7eb2c76f8f0e71db43c..7aca3fade656e0dc23312d299fb1080ddc7bcb86 100644 --- a/src/database/abstraction/rocksdb.rs +++ b/src/database/abstraction/rocksdb.rs @@ -8,14 +8,14 @@ use rocksdb::LogLevel::{Debug, Error, Fatal, Info, Warn}; -pub struct Engine { +pub(crate) struct Engine { rocks: rocksdb::DBWithThreadMode<rocksdb::MultiThreaded>, cache: rocksdb::Cache, old_cfs: Vec<String>, config: Config, } -pub struct RocksDbEngineTree<'a> { +struct RocksDbEngineTree<'a> { db: Arc<Engine>, name: &'a str, watchers: Watchers, diff --git a/src/database/key_value/globals.rs b/src/database/key_value/globals.rs index 7a70af183a10eecad289c920c22ddf82e7767631..3cc1663bc645043ec636a754a8db89865135a188 100644 --- a/src/database/key_value/globals.rs +++ b/src/database/key_value/globals.rs @@ -11,8 +11,8 @@ use crate::{database::KeyValueDatabase, service, services, utils, Error, Result}; -pub const COUNTER: &[u8] = b"c"; -pub const LAST_CHECK_FOR_UPDATES_COUNT: &[u8] = b"u"; +const COUNTER: &[u8] = b"c"; +const LAST_CHECK_FOR_UPDATES_COUNT: &[u8] = b"u"; #[async_trait] impl service::globals::Data for KeyValueDatabase { diff --git a/src/database/mod.rs b/src/database/mod.rs index 7234f8b80ff334cd0ba31960e15d12db8fa9c648..9b53785f5f7b877a773688312d158b4aee97d923 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -1,5 +1,5 @@ -pub mod abstraction; -pub mod key_value; +pub(crate) mod abstraction; +pub(crate) mod key_value; use crate::{ service::rooms::{edus::presence::presence_handler, timeline::PduCount}, @@ -1094,7 +1094,7 @@ pub async fn start_cleanup_task() { use tokio::time::Instant; let timer_interval = - Duration::from_secs(services().globals.config.cleanup_second_interval as u64); + Duration::from_secs(u64::from(services().globals.config.cleanup_second_interval)); fn perform_cleanup() { let start = Instant::now(); diff --git a/src/main.rs b/src/main.rs index cce432fd5d5654a501e36efc12dd0afee013578b..49ceb1b7cbebfb73c314841c6845a6d0ccdfa9a9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,7 +53,7 @@ #[derive(Parser)] #[clap(version, about, long_about = None)] -struct Args {} +struct Args; #[tokio::main] async fn main() { diff --git a/src/service/account_data/mod.rs b/src/service/account_data/mod.rs index f9c49b1a750f9da189e1175e4fe2c20362ed091e..bfdbd5f5d646523771ff59ee9cf035d87b70bfb3 100644 --- a/src/service/account_data/mod.rs +++ b/src/service/account_data/mod.rs @@ -1,6 +1,6 @@ mod data; -pub use data::Data; +pub(crate) use data::Data; use ruma::{ events::{AnyEphemeralRoomEvent, RoomAccountDataEventType}, diff --git a/src/service/appservice/mod.rs b/src/service/appservice/mod.rs index 3052964d1336f89cad7125314bd9d1c7aba2cacb..7789968c525f2a8dd50d2780fb884c022f9ce6e7 100644 --- a/src/service/appservice/mod.rs +++ b/src/service/appservice/mod.rs @@ -1,6 +1,6 @@ mod data; -pub use data::Data; +pub(crate) use data::Data; use crate::Result; diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs index 78d913e723e77a600b19c6ea4f2ef1daff0f1dbc..46d83206f42eeaf63a3fd993d666388e7952e3d3 100644 --- a/src/service/globals/mod.rs +++ b/src/service/globals/mod.rs @@ -75,7 +75,7 @@ pub struct Service<'a> { pub roomid_mutex_federation: RwLock<HashMap<OwnedRoomId, Arc<TokioMutex<()>>>>, // this lock will be held longer pub roomid_federationhandletime: RwLock<HashMap<OwnedRoomId, (OwnedEventId, Instant)>>, pub stateres_mutex: Arc<Mutex<()>>, - pub rotate: RotationHandler, + pub(crate) rotate: RotationHandler, pub shutdown: AtomicBool, pub argon: Argon2<'a>, @@ -84,12 +84,12 @@ pub struct Service<'a> { /// Handles "rotation" of long-polling requests. "Rotation" in this context is similar to "rotation" of log files and the like. /// /// This is utilized to have sync workers return early and release read locks on the database. -pub struct RotationHandler(broadcast::Sender<()>, broadcast::Receiver<()>); +pub(crate) struct RotationHandler(broadcast::Sender<()>, ()); impl RotationHandler { pub fn new() -> Self { - let (s, r) = broadcast::channel(1); - Self(s, r) + let (s, _r) = broadcast::channel(1); + Self(s, ()) } pub fn watch(&self) -> impl Future<Output = ()> { @@ -113,13 +113,13 @@ fn default() -> Self { type DnsOverrides = Box<dyn Fn(&str) -> Option<SocketAddr> + Send + Sync>; -pub struct Resolver { +struct Resolver { inner: GaiResolver, overrides: DnsOverrides, } impl Resolver { - pub fn new(overrides: DnsOverrides) -> Resolver { + fn new(overrides: DnsOverrides) -> Resolver { Resolver { inner: GaiResolver::new(), overrides, diff --git a/src/service/key_backups/mod.rs b/src/service/key_backups/mod.rs index 5fc52ceddf1d229f703dba20d4d186e1bdcb4430..50eca0b664506ce9f47cf457ec9ab6d822fb7770 100644 --- a/src/service/key_backups/mod.rs +++ b/src/service/key_backups/mod.rs @@ -1,5 +1,5 @@ mod data; -pub use data::Data; +pub(crate) use data::Data; use crate::Result; use ruma::{ diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs index 327abd861b1f9d433c90e4a2d8d732bad005bb4e..4a016bda9707feba3a529e632d78a996514f34c5 100644 --- a/src/service/media/mod.rs +++ b/src/service/media/mod.rs @@ -1,7 +1,7 @@ mod data; use std::io::Cursor; -pub use data::Data; +pub(crate) use data::Data; use crate::{services, Result}; use image::imageops::FilterType; diff --git a/src/service/mod.rs b/src/service/mod.rs index 883c567cfbc10e76ec6aed44cc73627c8cffbab4..0597c211a7ea4ec12bdc0f32c794ebc1762b03b5 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -7,19 +7,19 @@ use crate::{Config, Result}; -pub mod account_data; -pub mod admin; -pub mod appservice; -pub mod globals; -pub mod key_backups; -pub mod media; -pub mod pdu; -pub mod pusher; -pub mod rooms; -pub mod sending; -pub mod transaction_ids; -pub mod uiaa; -pub mod users; +pub(crate) mod account_data; +pub(crate) mod admin; +pub(crate) mod appservice; +pub(crate) mod globals; +pub(crate) mod key_backups; +pub(crate) mod media; +pub(crate) mod pdu; +pub(crate) mod pusher; +pub(crate) mod rooms; +pub(crate) mod sending; +pub(crate) mod transaction_ids; +pub(crate) mod uiaa; +pub(crate) mod users; pub struct Services<'a> { pub appservice: appservice::Service, diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 79e83f97a44897f77de17f29afa906db64357959..e737df17cae7c18529af3b7662797f7f4e1b6f2e 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,4 +1,4 @@ -pub mod error; +pub(crate) mod error; use crate::{services, Error, Result}; use argon2::{password_hash::SaltString, PasswordHasher}; @@ -14,14 +14,14 @@ time::{SystemTime, UNIX_EPOCH}, }; -pub fn millis_since_unix_epoch() -> u64 { +pub(crate) fn millis_since_unix_epoch() -> u64 { SystemTime::now() .duration_since(UNIX_EPOCH) .expect("time is valid") .as_millis() as u64 } -pub fn increment(old: Option<&[u8]>) -> Option<Vec<u8>> { +pub(crate) fn increment(old: Option<&[u8]>) -> Option<Vec<u8>> { let number = match old.map(|bytes| bytes.try_into()) { Some(Ok(bytes)) => { let number = u64::from_be_bytes(bytes); @@ -89,7 +89,7 @@ pub fn calculate_hash(keys: &[&[u8]]) -> Vec<u8> { hash.as_ref().to_owned() } -pub fn common_elements( +pub(crate) fn common_elements( mut iterators: impl Iterator<Item = impl Iterator<Item = Vec<u8>>>, check_order: impl Fn(&[u8], &[u8]) -> Ordering, ) -> Option<impl Iterator<Item = Vec<u8>>> { @@ -116,7 +116,7 @@ pub fn common_elements( /// Fallible conversion from any value that implements `Serialize` to a `CanonicalJsonObject`. /// /// `value` must serialize to an `serde_json::Value::Object`. -pub fn to_canonical_object<T: serde::Serialize>( +pub(crate) fn to_canonical_object<T: serde::Serialize>( value: T, ) -> Result<CanonicalJsonObject, CanonicalJsonError> { use serde::ser::Error; @@ -129,7 +129,7 @@ pub fn to_canonical_object<T: serde::Serialize>( } } -pub fn deserialize_from_str< +pub(crate) fn deserialize_from_str< 'de, D: serde::de::Deserializer<'de>, T: FromStr<Err = E>, @@ -160,7 +160,7 @@ fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> /// Wrapper struct which will emit the HTML-escaped version of the contained /// string when passed to a format string. -pub struct HtmlEscape<'a>(pub &'a str); +pub(crate) struct HtmlEscape<'a>(pub(crate) &'a str); impl<'a> fmt::Display for HtmlEscape<'a> { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {