From c2d9001051ea8033772d5aacd5dd1b14d6674ad0 Mon Sep 17 00:00:00 2001 From: Waffle Lapkin Date: Wed, 27 Nov 2019 17:30:33 +0300 Subject: [PATCH 1/5] Move CI to github actions --- .github/workflows/ci.yml | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..2a97f3ab --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,71 @@ +on: [push] + +name: Continuous integration + +jobs: + ci: + runs-on: ubuntu-latest + strategy: + matrix: + rust: + - stable + - beta + - nightly + + steps: + - uses: actions/checkout@v1 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + components: rustfmt, clippy + + - name: stable/beta build + uses: actions-rs/cargo@v1 + if: matrix.rust == 'stable' || matrix.rust == 'beta' + with: + command: build + args: --verbose --features "" + + - name: nightly build + uses: actions-rs/cargo@v1 + if: matrix.rust == 'nightly' + with: + command: build + args: --verbose --all-features + + - name: stable/beta test + uses: actions-rs/cargo@v1 + if: matrix.rust == 'stable' || matrix.rust == 'beta' + with: + command: test + args: --verbose --features "" + + - name: nightly test + uses: actions-rs/cargo@v1 + if: matrix.rust == 'nightly' + with: + command: test + args: --verbose --all-features + + - name: fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + - name: stable/beta clippy + uses: actions-rs/cargo@v1 + if: matrix.rust == 'stable' || matrix.rust == 'beta' + with: + command: clippy + args: --all-targets --features "" -- -D warnings + + - name: nightly clippy + uses: actions-rs/cargo@v1 + if: matrix.rust == 'nightly' + with: + command: clippy + args: --all-targets --all-features -- -D warnings From 7fea75f2d7a22eb494c48733732b1d6343266c3b Mon Sep 17 00:00:00 2001 From: Waffle Date: Wed, 27 Nov 2019 18:12:32 +0300 Subject: [PATCH 2/5] fix build on the latest nightly --- src/dispatching/dispatchers/filter/error_policy.rs | 13 ++++++++----- src/lib.rs | 2 -- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/dispatching/dispatchers/filter/error_policy.rs b/src/dispatching/dispatchers/filter/error_policy.rs index a54509b4..004f5509 100644 --- a/src/dispatching/dispatchers/filter/error_policy.rs +++ b/src/dispatching/dispatchers/filter/error_policy.rs @@ -1,4 +1,6 @@ -use std::{convert::Infallible, future::Future, pin::Pin}; +use std::{future::Future, pin::Pin}; +#[cfg(not(feature = "never-type"))] +use std::convert::Infallible; use async_trait::async_trait; @@ -82,23 +84,24 @@ where pub struct IgnoreSafe; #[cfg(feature = "never-type")] +#[allow(unreachable_code)] #[async_trait] impl ErrorPolicy for IgnoreSafe { - async fn handle_error(&self, never: !) + async fn handle_error(&self, _: !) where !: 'async_trait, { - never } } +#[cfg(not(feature = "never-type"))] +#[allow(unreachable_code)] #[async_trait] impl ErrorPolicy for IgnoreSafe { - async fn handle_error(&self, inf: Infallible) + async fn handle_error(&self, _: Infallible) where Infallible: 'async_trait, { - match inf {} } } diff --git a/src/lib.rs b/src/lib.rs index 339931e3..838a211a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,3 @@ -#![cfg_attr(feature = "never-type", feature(never_type))] - #[macro_use] extern crate derive_more; #[macro_use] From 4ae453963141359db98669d98f49d71e70ced331 Mon Sep 17 00:00:00 2001 From: Waffle Date: Wed, 27 Nov 2019 18:13:20 +0300 Subject: [PATCH 3/5] fmt --- src/dispatching/dispatchers/filter/error_policy.rs | 2 +- src/types/input_file.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dispatching/dispatchers/filter/error_policy.rs b/src/dispatching/dispatchers/filter/error_policy.rs index 004f5509..9d65f8d4 100644 --- a/src/dispatching/dispatchers/filter/error_policy.rs +++ b/src/dispatching/dispatchers/filter/error_policy.rs @@ -1,6 +1,6 @@ -use std::{future::Future, pin::Pin}; #[cfg(not(feature = "never-type"))] use std::convert::Infallible; +use std::{future::Future, pin::Pin}; use async_trait::async_trait; diff --git a/src/types/input_file.rs b/src/types/input_file.rs index 5b4418fe..1f125232 100644 --- a/src/types/input_file.rs +++ b/src/types/input_file.rs @@ -14,14 +14,14 @@ impl InputFile { pub fn url(url: T) -> Self where - T: Into + T: Into, { Self::Url(url.into()) } pub fn file_id(file_id: T) -> Self where - T: Into + T: Into, { Self::FileId(file_id.into()) } From 648ce5c00ef2dd95cd681b8fa99951c9a3b6e0e5 Mon Sep 17 00:00:00 2001 From: Waffle Date: Wed, 27 Nov 2019 18:47:06 +0300 Subject: [PATCH 4/5] clippy --- .../dispatchers/filter/error_policy.rs | 6 ++--- src/dispatching/dispatchers/filter/mod.rs | 22 +++++++++++-------- src/types/audio.rs | 2 +- src/types/chat_id.rs | 2 +- src/types/chat_member.rs | 2 +- src/types/inline_keyboard_markup.rs | 15 ++++++++++--- src/types/inline_query.rs | 2 +- src/types/inline_query_result.rs | 17 ++------------ src/types/message.rs | 2 ++ src/types/response_parameters.rs | 4 ++-- src/types/update.rs | 15 +++++++------ 11 files changed, 46 insertions(+), 43 deletions(-) diff --git a/src/dispatching/dispatchers/filter/error_policy.rs b/src/dispatching/dispatchers/filter/error_policy.rs index 9d65f8d4..18fa4620 100644 --- a/src/dispatching/dispatchers/filter/error_policy.rs +++ b/src/dispatching/dispatchers/filter/error_policy.rs @@ -17,7 +17,7 @@ pub trait ErrorPolicy { /// ## Example /// ``` /// # #[tokio::main] -/// # async fn main() { +/// # async fn main_() { /// use telebofr::dispatching::dispatchers::filter::error_policy::{ /// ErrorPolicy, Ignore, /// }; @@ -47,7 +47,7 @@ where /// ## Examples /// ``` /// # #[tokio::main] -/// # async fn main() { +/// # async fn main_() { /// use std::convert::{TryInto, Infallible}; /// /// use telebofr::dispatching::dispatchers::filter::error_policy::{ @@ -110,7 +110,7 @@ impl ErrorPolicy for IgnoreSafe { /// ## Example /// ``` /// # #[tokio::main] -/// # async fn main() { +/// # async fn main_() { /// use telebofr::dispatching::dispatchers::filter::error_policy::ErrorPolicy; /// /// let closure = |e: i32| async move { eprintln!("Error code{}", e) }; diff --git a/src/dispatching/dispatchers/filter/mod.rs b/src/dispatching/dispatchers/filter/mod.rs index 436aa921..1ae0e472 100644 --- a/src/dispatching/dispatchers/filter/mod.rs +++ b/src/dispatching/dispatchers/filter/mod.rs @@ -7,7 +7,10 @@ use crate::{ dispatchers::filter::error_policy::ErrorPolicy, filters::Filter, handler::Handler, updater::Updater, Dispatcher, }, - types::{CallbackQuery, ChosenInlineResult, Message, Update, UpdateKind}, + types::{ + CallbackQuery, ChosenInlineResult, InlineQuery, Message, Update, + UpdateKind, + }, }; pub mod error_policy; @@ -71,7 +74,7 @@ type FiltersAndHandlers<'a, T, E> = Vec>; /// /// // create dispatching which handlers can't fail /// // with error policy that just ignores all errors (that can't ever happen) -/// let mut dp = FilterDispatcher::::new(|_| async { () }) +/// let mut dp = FilterDispatcher::::new(|_| async {}) /// // Add 'handler' that will handle all messages sent to the bot /// .message_handler(true, |mes: Message| { /// async move { println!("New message: {:?}", mes) } @@ -94,7 +97,7 @@ pub struct FilterDispatcher<'a, E, Ep> { edited_message_handlers: FiltersAndHandlers<'a, Message, E>, channel_post_handlers: FiltersAndHandlers<'a, Message, E>, edited_channel_post_handlers: FiltersAndHandlers<'a, Message, E>, - inline_query_handlers: FiltersAndHandlers<'a, (), E>, + inline_query_handlers: FiltersAndHandlers<'a, InlineQuery, E>, chosen_inline_result_handlers: FiltersAndHandlers<'a, ChosenInlineResult, E>, callback_query_handlers: FiltersAndHandlers<'a, CallbackQuery, E>, @@ -165,8 +168,8 @@ where pub fn inline_query_handler(mut self, filter: F, handler: H) -> Self where - F: Filter<()> + 'a, - H: Handler<'a, (), E> + 'a, + F: Filter + 'a, + H: Handler<'a, InlineQuery, E> + 'a, { self.inline_query_handlers .push(FilterAndHandler::new(filter, handler)); @@ -259,6 +262,7 @@ where .await; } + #[allow(clippy::ptr_arg)] // TODO: proper fix async fn handle( &self, update: T, @@ -316,7 +320,7 @@ mod tests { let counter = &AtomicI32::new(0); let counter2 = &AtomicI32::new(0); - let mut dp = FilterDispatcher::::new(|_| async { () }) + let mut dp = FilterDispatcher::::new(|_| async {}) .message_handler(true, |_mes: Message| { async move { counter.fetch_add(1, Ordering::SeqCst); @@ -338,9 +342,9 @@ mod tests { fn message() -> Message { Message { id: 6534, - date: 1567898953, + date: 1_567_898_953, chat: Chat { - id: 218485655, + id: 218_485_655, photo: None, kind: ChatKind::Private { type_: (), @@ -351,7 +355,7 @@ mod tests { }, kind: MessageKind::Common { from: Sender::User(User { - id: 457569668, + id: 457_569_668, is_bot: true, first_name: "BT".to_string(), last_name: None, diff --git a/src/types/audio.rs b/src/types/audio.rs index fa17e27d..23c7762f 100644 --- a/src/types/audio.rs +++ b/src/types/audio.rs @@ -37,7 +37,7 @@ mod tests { performer: Some("Performer".to_string()), title: Some("Title".to_string()), mime_type: Some("MimeType".to_string()), - file_size: Some(123456), + file_size: Some(123_456), thumb: Some(PhotoSize { file_id: "id".to_string(), width: 320, diff --git a/src/types/chat_id.rs b/src/types/chat_id.rs index c6e69093..2fffeece 100644 --- a/src/types/chat_id.rs +++ b/src/types/chat_id.rs @@ -18,7 +18,7 @@ mod tests { #[test] fn chat_id_id_serialization() { let expected_json = String::from(r#"123456"#); - let actual_json = serde_json::to_string(&ChatId::Id(123456)).unwrap(); + let actual_json = serde_json::to_string(&ChatId::Id(123_456)).unwrap(); assert_eq!(expected_json, actual_json) } diff --git a/src/types/chat_member.rs b/src/types/chat_member.rs index b386963e..ffb4bfbe 100644 --- a/src/types/chat_member.rs +++ b/src/types/chat_member.rs @@ -106,7 +106,7 @@ mod tests { language_code: None, }, status: ChatMemberStatus::Creator, - until_date: Some(123456), + until_date: Some(123_456), can_be_edited: Some(true), can_change_info: Some(true), can_post_messages: Some(true), diff --git a/src/types/inline_keyboard_markup.rs b/src/types/inline_keyboard_markup.rs index 2ca92ee4..573150c5 100644 --- a/src/types/inline_keyboard_markup.rs +++ b/src/types/inline_keyboard_markup.rs @@ -61,11 +61,14 @@ mod tests { "text 2".to_string(), "url 2".to_string(), ); + let markup = InlineKeyboardMarkup::new() .append_row(vec![button1.clone(), button2.clone()]); + let expected = InlineKeyboardMarkup { - inline_keyboard: vec![vec![button1.clone(), button2.clone()]], + inline_keyboard: vec![vec![button1, button2]], }; + assert_eq!(markup, expected); } @@ -79,12 +82,15 @@ mod tests { "text 2".to_string(), "url 2".to_string(), ); + let markup = InlineKeyboardMarkup::new() .append_row(vec![button1.clone()]) .append_to_row(button2.clone(), 0); + let expected = InlineKeyboardMarkup { - inline_keyboard: vec![vec![button1.clone(), button2.clone()]], + inline_keyboard: vec![vec![button1, button2]], }; + assert_eq!(markup, expected); } @@ -98,12 +104,15 @@ mod tests { "text 2".to_string(), "url 2".to_string(), ); + let markup = InlineKeyboardMarkup::new() .append_row(vec![button1.clone()]) .append_to_row(button2.clone(), 1); + let expected = InlineKeyboardMarkup { - inline_keyboard: vec![vec![button1.clone()], vec![button2.clone()]], + inline_keyboard: vec![vec![button1], vec![button2]], }; + assert_eq!(markup, expected); } } diff --git a/src/types/inline_query.rs b/src/types/inline_query.rs index 6c145dc0..eda99bed 100644 --- a/src/types/inline_query.rs +++ b/src/types/inline_query.rs @@ -1,6 +1,6 @@ use crate::types::{Location, User}; -#[derive(Debug, Serialize, PartialEq, Clone)] +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] pub struct InlineQuery { /// Unique identifier for this query pub id: String, diff --git a/src/types/inline_query_result.rs b/src/types/inline_query_result.rs index 098d0dc4..2bca2dde 100644 --- a/src/types/inline_query_result.rs +++ b/src/types/inline_query_result.rs @@ -1,3 +1,5 @@ +#![allow(clippy::large_enum_variant)] + use crate::types::{ InlineQueryResultArticle, InlineQueryResultAudio, InlineQueryResultCachedAudio, InlineQueryResultCachedDocument, @@ -54,21 +56,6 @@ mod tests { InlineQueryResult, InlineQueryResultCachedAudio, InputMessageContent, }; - #[test] - fn into() { - let structure = - InlineQueryResult::CachedAudio(InlineQueryResultCachedAudio { - id: String::from("id"), - audio_file_id: String::from("audio_file_id"), - caption: None, - parse_mode: None, - reply_markup: None, - input_message_content: None, - }); - - let _: InlineQueryResult = structure.into(); - } - #[test] fn cached_audio_min_serialize() { let structure = diff --git a/src/types/message.rs b/src/types/message.rs index 61bebed0..768b8634 100644 --- a/src/types/message.rs +++ b/src/types/message.rs @@ -1,3 +1,5 @@ +#![allow(clippy::large_enum_variant)] + use crate::types::{ Animation, Audio, Chat, Contact, Document, Game, InlineKeyboardMarkup, Invoice, Location, MessageEntity, PassportData, PhotoSize, Poll, Sticker, diff --git a/src/types/response_parameters.rs b/src/types/response_parameters.rs index b456d5fd..4b447256 100644 --- a/src/types/response_parameters.rs +++ b/src/types/response_parameters.rs @@ -11,7 +11,7 @@ mod tests { #[test] fn migrate_to_chat_id_deserialization() { - let expected = ResponseParameters::MigrateToChatId(123456); + let expected = ResponseParameters::MigrateToChatId(123_456); let actual: ResponseParameters = serde_json::from_str(r#"{"migrate_to_chat_id":123456}"#).unwrap(); @@ -20,7 +20,7 @@ mod tests { #[test] fn retry_after_deserialization() { - let expected = ResponseParameters::RetryAfter(123456); + let expected = ResponseParameters::RetryAfter(123_456); let actual: ResponseParameters = serde_json::from_str(r#"{"retry_after":123456}"#).unwrap(); diff --git a/src/types/update.rs b/src/types/update.rs index 14251f3d..394e4a6b 100644 --- a/src/types/update.rs +++ b/src/types/update.rs @@ -1,4 +1,6 @@ -use crate::types::{CallbackQuery, ChosenInlineResult, Message}; +#![allow(clippy::large_enum_variant)] + +use crate::types::{CallbackQuery, ChosenInlineResult, InlineQuery, Message}; #[derive(Debug, Deserialize, PartialEq, Clone)] pub struct Update { @@ -15,8 +17,7 @@ pub enum UpdateKind { EditedMessage(Message), ChannelPost(Message), EditedChannelPost(Message), - InlineQuery(()), - // TODO + InlineQuery(InlineQuery), ChosenInlineResult(ChosenInlineResult), CallbackQuery(CallbackQuery), } @@ -54,12 +55,12 @@ mod test { }"#; let expected: Update = Update { - id: 892252934, + id: 892_252_934, kind: UpdateKind::Message(Message { id: 6557, - date: 1569518342, + date: 1_569_518_342, chat: Chat { - id: 218485655, + id: 218_485_655, kind: ChatKind::Private { type_: (), username: Some(String::from("WaffleLapkin")), @@ -70,7 +71,7 @@ mod test { }, kind: MessageKind::Common { from: Sender::User(User { - id: 218485655, + id: 218_485_655, is_bot: false, first_name: String::from("Waffle"), last_name: None, From 9533b53c4e435038bc09c65b9ee6902fcbfb1426 Mon Sep 17 00:00:00 2001 From: Waffle Date: Wed, 27 Nov 2019 18:53:12 +0300 Subject: [PATCH 5/5] Remove travis CI --- .travis.yml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5f9f928e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: Rust - - -env: - - RUST_BACKTRACE=1 - -script: - - rustup override set nightly - - cargo build --all --verbose - - cargo test --all