Fix assorted warnings

This commit is contained in:
Maybe Waffle 2024-03-21 14:42:45 +01:00
parent cedf223b0d
commit b8c45110a3
28 changed files with 50 additions and 99 deletions

View file

@ -12,7 +12,7 @@ use url::Url;
use crate::{ use crate::{
payloads::GetMe, payloads::GetMe,
requests::{HasPayload, Request, Requester}, requests::{HasPayload, Request, Requester},
types::{Me, Recipient, *}, types::*,
}; };
/// `get_me` cache. /// `get_me` cache.

View file

@ -11,7 +11,7 @@ use crate::{
}, },
prelude::Requester, prelude::Requester,
requests::{HasPayload, Output, Request}, requests::{HasPayload, Output, Request},
types::{InputFile, ParseMode, Recipient, *}, types::*,
}; };
/// Default parse mode adaptor, see /// Default parse mode adaptor, see

View file

@ -61,7 +61,7 @@
html_logo_url = "https://cdn.discordapp.com/attachments/224881373326999553/798598120760934410/logo.png", html_logo_url = "https://cdn.discordapp.com/attachments/224881373326999553/798598120760934410/logo.png",
html_favicon_url = "https://cdn.discordapp.com/attachments/224881373326999553/798598120760934410/logo.png" html_favicon_url = "https://cdn.discordapp.com/attachments/224881373326999553/798598120760934410/logo.png"
)] )]
#![forbid(unsafe_code)] //
// we pass "--cfg docsrs" when building docs to add `This is supported on feature="..." only.` // we pass "--cfg docsrs" when building docs to add `This is supported on feature="..." only.`
// //
// To properly build docs of this crate run // To properly build docs of this crate run
@ -78,16 +78,29 @@
)] )]
#![cfg_attr(feature = "nightly", feature(type_alias_impl_trait))] #![cfg_attr(feature = "nightly", feature(type_alias_impl_trait))]
#![cfg_attr(all(feature = "full", docsrs), deny(rustdoc::broken_intra_doc_links))] #![cfg_attr(all(feature = "full", docsrs), deny(rustdoc::broken_intra_doc_links))]
//
// Lint levels
#![forbid(unsafe_code)]
//#![deny(missing_docs)] //#![deny(missing_docs)]
#![warn(clippy::print_stdout, clippy::dbg_macro)] #![warn(clippy::print_stdout, clippy::dbg_macro)]
#![allow(clippy::let_and_return)]
#![allow(clippy::bool_assert_comparison)]
// Unless this becomes machine applicable, I'm not adding 334 #[must_use]s (waffle)
#![allow(clippy::return_self_not_must_use)]
// Workaround for CI
#![allow(rustdoc::bare_urls)]
// FIXME: deal with these lints
#![allow( #![allow(
// Sometimes it's more readable to assign to a variable and return it immediately
clippy::let_and_return,
// When you are testing ->bool functions, it makes sense to `assert_eq!(f(..), false)`
clippy::bool_assert_comparison,
// Unless this becomes machine applicable, I'm not adding 334 #[must_use]s (waffle)
clippy::return_self_not_must_use,
// This is dumb. `T: ?Sized where T: Trait` IMO makes perfect sense
clippy::multiple_bound_locations,
// Workaround for CI
// FIXME: do we still need this?
rustdoc::bare_urls,
// FIXME: deal with these lints
clippy::collapsible_str_replace, clippy::collapsible_str_replace,
clippy::borrow_deref_ref, clippy::borrow_deref_ref,
clippy::unnecessary_lazy_evaluations, clippy::unnecessary_lazy_evaluations,

View file

@ -49,7 +49,7 @@ impl<R> From<TelegramResponse<R>> for ResponseResult<R> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::{errors::ApiError, types::Update}; use crate::types::Update;
#[test] #[test]
fn parse_terminated_by_other_get_updates() { fn parse_terminated_by_other_get_updates() {

View file

@ -20,4 +20,3 @@ mod payload;
mod request; mod request;
mod requester; mod requester;
mod requester_ext; mod requester_ext;
mod utils;

View file

@ -3,11 +3,7 @@
use url::Url; use url::Url;
use crate::{ use crate::{payloads::*, requests::Request, types::*};
payloads::{GetMe, SendMessage, *},
requests::Request,
types::*,
};
/// Telegram Bot API client. /// Telegram Bot API client.
/// ///

View file

@ -1,16 +0,0 @@
use bytes::{Bytes, BytesMut};
use tokio_util::codec::Decoder;
struct FileDecoder;
impl Decoder for FileDecoder {
type Item = Bytes;
type Error = std::io::Error;
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
if src.is_empty() {
return Ok(None);
}
Ok(Some(src.split().freeze()))
}
}

View file

@ -268,16 +268,12 @@ pub use user_id::*;
use serde::Serialize; use serde::Serialize;
/// Converts an `i64` timestump to a `choro::DateTime`, producing serde error /// Converts an `i64` timestamp to a `choro::DateTime`, producing serde error
/// for invalid timestumps /// for invalid timestamps
pub(crate) fn serde_timestamp<E: serde::de::Error>( pub(crate) fn serde_timestamp<E: serde::de::Error>(
timestamp: i64, timestamp: i64,
) -> Result<chrono::DateTime<chrono::Utc>, E> { ) -> Result<chrono::DateTime<chrono::Utc>, E> {
use chrono::{DateTime, NaiveDateTime, Utc}; chrono::DateTime::from_timestamp(timestamp, 0).ok_or_else(|| E::custom("invalid timestump"))
NaiveDateTime::from_timestamp_opt(timestamp, 0)
.ok_or_else(|| E::custom("invalid timestump"))
.map(|naive| DateTime::from_naive_utc_and_offset(naive, Utc))
} }
pub(crate) mod serde_opt_date_from_unix_timestamp { pub(crate) mod serde_opt_date_from_unix_timestamp {
@ -313,10 +309,7 @@ pub(crate) mod serde_opt_date_from_unix_timestamp {
{ {
let json = r#"{"date":1}"#; let json = r#"{"date":1}"#;
let expected = DateTime::from_naive_utc_and_offset( let expected = DateTime::from_timestamp(1, 0).unwrap();
chrono::NaiveDateTime::from_timestamp_opt(1, 0).unwrap(),
Utc,
);
let Struct { date } = serde_json::from_str(json).unwrap(); let Struct { date } = serde_json::from_str(json).unwrap();
assert_eq!(date, Some(expected)); assert_eq!(date, Some(expected));

View file

@ -36,8 +36,6 @@ pub struct Animation {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::types::FileMeta;
use super::*; use super::*;
#[test] #[test]

View file

@ -36,8 +36,6 @@ pub struct Audio {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::types::{FileMeta, Seconds};
use super::*; use super::*;
#[test] #[test]

View file

@ -702,7 +702,7 @@ mod tests {
can_invite_users: true, can_invite_users: true,
can_pin_messages: true, can_pin_messages: true,
until_date: UntilDate::Date( until_date: UntilDate::Date(
chrono::NaiveDateTime::from_timestamp_opt(1620000000, 0).unwrap().and_utc(), chrono::DateTime::from_timestamp(1620000000, 0).unwrap(),
), ),
}), }),
}; };

View file

@ -15,15 +15,8 @@ use tokio::{
use tokio_util::codec::{Decoder, FramedRead}; use tokio_util::codec::{Decoder, FramedRead};
use std::{ use std::{
borrow::Cow, borrow::Cow, convert::Infallible, fmt, future::Future, io, iter, mem, path::PathBuf, pin::Pin,
convert::{Infallible, TryFrom}, sync::Arc, task,
fmt,
future::Future,
io, iter, mem,
path::PathBuf,
pin::Pin,
sync::Arc,
task,
}; };
use crate::types::InputSticker; use crate::types::InputSticker;

View file

@ -1748,7 +1748,7 @@ mod tests {
Message { Message {
id: MessageId(198283), id: MessageId(198283),
thread_id: None, thread_id: None,
date: chrono::NaiveDateTime::from_timestamp_opt(1567927221, 0).unwrap().and_utc(), date: chrono::DateTime::from_timestamp(1567927221, 0).unwrap(),
chat: Chat { chat: Chat {
id: ChatId(250918540), id: ChatId(250918540),
kind: ChatKind::Private(ChatPrivate { kind: ChatKind::Private(ChatPrivate {

View file

@ -264,7 +264,6 @@ pub enum MessageEntityKind {
mod tests { mod tests {
use super::*; use super::*;
use cool_asserts::assert_matches; use cool_asserts::assert_matches;
use MessageEntity;
use MessageEntityKind::*; use MessageEntityKind::*;
#[test] #[test]

View file

@ -2,10 +2,7 @@
// (for built ins there no warnings, but for (De)Serialize, there are) // (for built ins there no warnings, but for (De)Serialize, there are)
#![allow(deprecated)] #![allow(deprecated)]
use std::{ use std::str::FromStr;
convert::{TryFrom, TryInto},
str::FromStr,
};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -184,8 +181,8 @@ impl FromStr for ParseMode {
} }
#[cfg(test)] #[cfg(test)]
#[allow(deprecated)]
mod tests { mod tests {
#![allow(deprecated)]
use super::*; use super::*;

View file

@ -20,7 +20,6 @@ pub enum ResponseParameters {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::types::{ChatId, Seconds};
#[test] #[test]
fn migrate_to_chat_id_deserialization() { fn migrate_to_chat_id_deserialization() {

View file

@ -26,8 +26,11 @@ impl Seconds {
} }
/// Returns [`chrono::Duration`] equivalent of this duration. /// Returns [`chrono::Duration`] equivalent of this duration.
// FIXME: rename to `time_delta` (the new name of `chrono::Duration`)?
pub fn chrono_duration(self) -> chrono::Duration { pub fn chrono_duration(self) -> chrono::Duration {
chrono::Duration::seconds(self.seconds() as i64) // Unwrap: `self.seconds()` is a `u32`, which is always between `-i64::MAX/1000`
// and `i64::MAX/1000`
chrono::Duration::try_seconds(self.seconds() as i64).unwrap()
} }
} }

View file

@ -1,4 +1,4 @@
use std::{convert::TryFrom, ops::Deref}; use std::ops::Deref;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View file

@ -384,16 +384,13 @@ mod test {
MessageId, MessageKind, Update, UpdateId, UpdateKind, User, UserId, MessageId, MessageKind, Update, UpdateId, UpdateKind, User, UserId,
}; };
use chrono::{DateTime, NaiveDateTime, Utc}; use chrono::DateTime;
// TODO: more tests for deserialization // TODO: more tests for deserialization
#[test] #[test]
fn message() { fn message() {
let timestamp = 1_569_518_342; let timestamp = 1_569_518_342;
let date = DateTime::from_naive_utc_and_offset( let date = DateTime::from_timestamp(timestamp, 0).unwrap();
NaiveDateTime::from_timestamp_opt(timestamp, 0).unwrap(),
Utc,
);
let json = r#"{ let json = r#"{
"update_id":892252934, "update_id":892252934,

View file

@ -1,5 +1,3 @@
use std::iter::FromIterator;
pub(crate) struct Unzip<A, B>(pub A, pub B); pub(crate) struct Unzip<A, B>(pub A, pub B);
impl<A, B, T, U> FromIterator<(T, U)> for Unzip<A, B> impl<A, B, T, U> FromIterator<(T, U)> for Unzip<A, B>

View file

@ -129,9 +129,11 @@ async fn mute_user(bot: Bot, msg: Message, time: Duration) -> ResponseResult<()>
// Calculates time of user restriction. // Calculates time of user restriction.
fn calc_restrict_time(time: u64, unit: UnitOfTime) -> Duration { fn calc_restrict_time(time: u64, unit: UnitOfTime) -> Duration {
// FIXME: actually handle the case of too big integers correctly, instead of
// unwrapping
match unit { match unit {
UnitOfTime::Hours => Duration::hours(time as i64), UnitOfTime::Hours => Duration::try_hours(time as i64).unwrap(),
UnitOfTime::Minutes => Duration::minutes(time as i64), UnitOfTime::Minutes => Duration::try_minutes(time as i64).unwrap(),
UnitOfTime::Seconds => Duration::seconds(time as i64), UnitOfTime::Seconds => Duration::try_seconds(time as i64).unwrap(),
} }
} }

View file

@ -1,9 +1,4 @@
use teloxide::{ use teloxide::{prelude::*, types::ParseMode, utils::html};
dispatching::Dispatcher,
prelude::*,
types::{ChatMemberUpdated, ParseMode, Update},
utils::html,
};
use teloxide_core::adaptors::DefaultParseMode; use teloxide_core::adaptors::DefaultParseMode;
/// We use a type alias to be able to write just `bot: Bot` in handlers, instead /// We use a type alias to be able to write just `bot: Bot` in handlers, instead

View file

@ -3,11 +3,7 @@
use rand::Rng; use rand::Rng;
use teloxide::{ use teloxide::{prelude::*, types::Dice, utils::command::BotCommands};
prelude::*,
types::{Dice, Update, UserId},
utils::command::BotCommands,
};
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {

View file

@ -3,7 +3,6 @@ use teloxide::{
types::{ types::{
InlineQueryResult, InlineQueryResultArticle, InputMessageContent, InputMessageContentText, InlineQueryResult, InlineQueryResultArticle, InputMessageContent, InputMessageContentText,
}, },
Bot,
}; };
#[tokio::main] #[tokio::main]

View file

@ -1,8 +1,4 @@
use std::{ use std::{fmt::Debug, sync::Arc};
fmt::Debug,
marker::{Send, Sync},
sync::Arc,
};
use futures::future::BoxFuture; use futures::future::BoxFuture;
use teloxide_core::types::ChatId; use teloxide_core::types::ChatId;

View file

@ -1,5 +1,4 @@
use std::{ use std::{
convert::TryInto,
future::Future, future::Future,
mem, mem,
pin::Pin, pin::Pin,

View file

@ -115,8 +115,6 @@ pub fn user_mention_or_link(user: &User) -> String {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use teloxide_core::types::UserId;
use super::*; use super::*;
#[test] #[test]

View file

@ -157,7 +157,6 @@ pub fn user_mention_or_link(user: &User) -> String {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use teloxide_core::types::{User, UserId};
#[test] #[test]
fn test_bold() { fn test_bold() {