mirror of
https://github.com/teloxide/teloxide.git
synced 2025-03-22 06:45:37 +01:00
Use Seconds
where it makes sense
This commit is contained in:
parent
13032ac8dc
commit
65f693b31f
12 changed files with 42 additions and 34 deletions
|
@ -1,7 +1,7 @@
|
||||||
use mime::Mime;
|
use mime::Mime;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{FileMeta, PhotoSize};
|
use crate::types::{FileMeta, PhotoSize, Seconds};
|
||||||
|
|
||||||
/// This object represents an animation file (GIF or H.264/MPEG-4 AVC video
|
/// This object represents an animation file (GIF or H.264/MPEG-4 AVC video
|
||||||
/// without sound).
|
/// without sound).
|
||||||
|
@ -21,7 +21,7 @@ pub struct Animation {
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
|
|
||||||
/// A duration of the video in seconds as defined by a sender.
|
/// A duration of the video in seconds as defined by a sender.
|
||||||
pub duration: u32,
|
pub duration: Seconds,
|
||||||
|
|
||||||
/// An animation thumbnail as defined by a sender.
|
/// An animation thumbnail as defined by a sender.
|
||||||
pub thumb: Option<PhotoSize>,
|
pub thumb: Option<PhotoSize>,
|
||||||
|
@ -62,7 +62,7 @@ mod tests {
|
||||||
file: FileMeta { id: "id".to_string(), unique_id: "".to_string(), size: 6500 },
|
file: FileMeta { id: "id".to_string(), unique_id: "".to_string(), size: 6500 },
|
||||||
width: 320,
|
width: 320,
|
||||||
height: 320,
|
height: 320,
|
||||||
duration: 59,
|
duration: Seconds::from_seconds(59),
|
||||||
thumb: Some(PhotoSize {
|
thumb: Some(PhotoSize {
|
||||||
file: FileMeta { id: "id".to_owned(), unique_id: "".to_owned(), size: 3452 },
|
file: FileMeta { id: "id".to_owned(), unique_id: "".to_owned(), size: 3452 },
|
||||||
width: 320,
|
width: 320,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use mime::Mime;
|
use mime::Mime;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{FileMeta, PhotoSize};
|
use crate::types::{FileMeta, PhotoSize, Seconds};
|
||||||
|
|
||||||
/// This object represents an audio file to be treated as music by the Telegram
|
/// This object represents an audio file to be treated as music by the Telegram
|
||||||
/// clients.
|
/// clients.
|
||||||
|
@ -15,7 +15,7 @@ pub struct Audio {
|
||||||
pub file: FileMeta,
|
pub file: FileMeta,
|
||||||
|
|
||||||
/// A duration of the audio in seconds as defined by a sender.
|
/// A duration of the audio in seconds as defined by a sender.
|
||||||
pub duration: u32,
|
pub duration: Seconds,
|
||||||
|
|
||||||
/// A performer of the audio as defined by a sender or by audio tags.
|
/// A performer of the audio as defined by a sender or by audio tags.
|
||||||
pub performer: Option<String>,
|
pub performer: Option<String>,
|
||||||
|
@ -36,7 +36,7 @@ pub struct Audio {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::types::FileMeta;
|
use crate::types::{FileMeta, Seconds};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ mod tests {
|
||||||
}"#;
|
}"#;
|
||||||
let expected = Audio {
|
let expected = Audio {
|
||||||
file: FileMeta { id: "id".to_string(), unique_id: "".to_string(), size: 123_456 },
|
file: FileMeta { id: "id".to_string(), unique_id: "".to_string(), size: 123_456 },
|
||||||
duration: 60,
|
duration: Seconds::from_seconds(60),
|
||||||
performer: Some("Performer".to_string()),
|
performer: Some("Performer".to_string()),
|
||||||
title: Some("Title".to_string()),
|
title: Some("Title".to_string()),
|
||||||
mime_type: Some("application/zip".parse().unwrap()),
|
mime_type: Some("application/zip".parse().unwrap()),
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{ChatId, ChatLocation, ChatPermissions, ChatPhoto, Message, True, User};
|
use crate::types::{
|
||||||
|
ChatId, ChatLocation, ChatPermissions, ChatPhoto, Message, Seconds, True, User,
|
||||||
|
};
|
||||||
|
|
||||||
/// This object represents a chat.
|
/// This object represents a chat.
|
||||||
///
|
///
|
||||||
|
@ -29,7 +31,7 @@ pub struct Chat {
|
||||||
/// deleted; in seconds. Returned only in [`GetChat`].
|
/// deleted; in seconds. Returned only in [`GetChat`].
|
||||||
///
|
///
|
||||||
/// [`GetChat`]: crate::payloads::GetChat
|
/// [`GetChat`]: crate::payloads::GetChat
|
||||||
pub message_auto_delete_time: Option<u32>,
|
pub message_auto_delete_time: Option<Seconds>,
|
||||||
|
|
||||||
/// `true`, if non-administrators can only get the list of bots and
|
/// `true`, if non-administrators can only get the list of bots and
|
||||||
/// administrators in the chat. Returned only in [`GetChat`].
|
/// administrators in the chat. Returned only in [`GetChat`].
|
||||||
|
@ -202,7 +204,7 @@ pub struct PublicChatSupergroup {
|
||||||
/// unpriviledged user. Returned only from [`GetChat`].
|
/// unpriviledged user. Returned only from [`GetChat`].
|
||||||
///
|
///
|
||||||
/// [`GetChat`]: crate::payloads::GetChat
|
/// [`GetChat`]: crate::payloads::GetChat
|
||||||
pub slow_mode_delay: Option<u32>,
|
pub slow_mode_delay: Option<Seconds>,
|
||||||
|
|
||||||
/// Unique identifier for the linked chat, i.e. the discussion group
|
/// Unique identifier for the linked chat, i.e. the discussion group
|
||||||
/// identifier for a channel and vice versa. Returned only in [`GetChat`].
|
/// identifier for a channel and vice versa. Returned only in [`GetChat`].
|
||||||
|
@ -355,7 +357,7 @@ impl Chat {
|
||||||
///
|
///
|
||||||
/// [`GetChat`]: crate::payloads::GetChat
|
/// [`GetChat`]: crate::payloads::GetChat
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn slow_mode_delay(&self) -> Option<u32> {
|
pub fn slow_mode_delay(&self) -> Option<Seconds> {
|
||||||
if let ChatKind::Public(this) = &self.kind {
|
if let ChatKind::Public(this) = &self.kind {
|
||||||
if let PublicChatKind::Supergroup(this) = &this.kind {
|
if let PublicChatKind::Supergroup(this) = &this.kind {
|
||||||
return this.slow_mode_delay;
|
return this.slow_mode_delay;
|
||||||
|
|
|
@ -29,7 +29,7 @@ pub struct InlineQueryResultLocation {
|
||||||
|
|
||||||
/// Period in seconds for which the location can be updated, should be
|
/// Period in seconds for which the location can be updated, should be
|
||||||
/// between 60 and 86400.
|
/// between 60 and 86400.
|
||||||
pub live_period: Option<i32>,
|
pub live_period: Option<u32>,
|
||||||
|
|
||||||
/// For live locations, a direction in which the user is moving, in degrees.
|
/// For live locations, a direction in which the user is moving, in degrees.
|
||||||
/// Must be between 1 and 360 if specified.
|
/// Must be between 1 and 360 if specified.
|
||||||
|
@ -116,7 +116,7 @@ impl InlineQueryResultLocation {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn live_period(mut self, val: i32) -> Self {
|
pub fn live_period(mut self, val: u32) -> Self {
|
||||||
self.live_period = Some(val);
|
self.live_period = Some(val);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::types::Seconds;
|
||||||
|
|
||||||
/// This object represents a point on the map.
|
/// This object represents a point on the map.
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct Location {
|
pub struct Location {
|
||||||
|
@ -14,7 +16,7 @@ pub struct Location {
|
||||||
|
|
||||||
/// Time relative to the message sending date, during which the location can
|
/// Time relative to the message sending date, during which the location can
|
||||||
/// be updated, in seconds. For active live locations only.
|
/// be updated, in seconds. For active live locations only.
|
||||||
pub live_period: Option<u32>,
|
pub live_period: Option<Seconds>,
|
||||||
|
|
||||||
/// The direction in which user is moving, in degrees; 1-360. For active
|
/// The direction in which user is moving, in degrees; 1-360. For active
|
||||||
/// live locations only.
|
/// live locations only.
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::types::Seconds;
|
||||||
|
|
||||||
/// This object represents a service message about a change in auto-delete timer
|
/// This object represents a service message about a change in auto-delete timer
|
||||||
/// settings.
|
/// settings.
|
||||||
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct MessageAutoDeleteTimerChanged {
|
pub struct MessageAutoDeleteTimerChanged {
|
||||||
/// New auto-delete time for messages in the chat
|
/// New auto-delete time for messages in the chat
|
||||||
pub message_auto_delete_time: u32,
|
pub message_auto_delete_time: Seconds,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::types::{MessageEntity, PollType, User};
|
use crate::types::{MessageEntity, PollType, Seconds, User};
|
||||||
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -48,7 +48,7 @@ pub struct Poll {
|
||||||
pub explanation_entities: Option<Vec<MessageEntity>>,
|
pub explanation_entities: Option<Vec<MessageEntity>>,
|
||||||
|
|
||||||
/// Amount of time in seconds the poll will be active after creation.
|
/// Amount of time in seconds the poll will be active after creation.
|
||||||
pub open_period: Option<u16>,
|
pub open_period: Option<Seconds>,
|
||||||
|
|
||||||
/// Point in time when the poll will be automatically closed.
|
/// Point in time when the poll will be automatically closed.
|
||||||
#[serde(default, with = "crate::types::serde_opt_date_from_unix_timestamp")]
|
#[serde(default, with = "crate::types::serde_opt_date_from_unix_timestamp")]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::types::{ChatId, Seconds};
|
||||||
|
|
||||||
/// Contains information about why a request was unsuccessful.
|
/// Contains information about why a request was unsuccessful.
|
||||||
///
|
///
|
||||||
/// [The official docs](https://core.telegram.org/bots/api#responseparameters).
|
/// [The official docs](https://core.telegram.org/bots/api#responseparameters).
|
||||||
|
@ -9,25 +9,22 @@ use serde::{Deserialize, Serialize};
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum ResponseParameters {
|
pub enum ResponseParameters {
|
||||||
/// The group has been migrated to a supergroup with the specified
|
/// The group has been migrated to a supergroup with the specified
|
||||||
/// identifier. This number may be greater than 32 bits and some
|
|
||||||
/// programming languages may have difficulty/silent defects in
|
|
||||||
/// interpreting it. But it is smaller than 52 bits, so a signed 64 bit
|
|
||||||
/// integer or double-precision float type are safe for storing this
|
|
||||||
/// identifier.
|
/// identifier.
|
||||||
MigrateToChatId(i64),
|
MigrateToChatId(ChatId),
|
||||||
|
|
||||||
/// In case of exceeding flood control, the number of seconds left to wait
|
/// In case of exceeding flood control, the number of seconds left to wait
|
||||||
/// before the request can be repeated.
|
/// before the request can be repeated.
|
||||||
RetryAfter(#[serde(with = "crate::types::duration_secs")] Duration),
|
RetryAfter(Seconds),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[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() {
|
||||||
let expected = ResponseParameters::MigrateToChatId(123_456);
|
let expected = ResponseParameters::MigrateToChatId(ChatId(123_456));
|
||||||
let actual: ResponseParameters =
|
let actual: ResponseParameters =
|
||||||
serde_json::from_str(r#"{"migrate_to_chat_id":123456}"#).unwrap();
|
serde_json::from_str(r#"{"migrate_to_chat_id":123456}"#).unwrap();
|
||||||
|
|
||||||
|
@ -36,7 +33,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn retry_after_deserialization() {
|
fn retry_after_deserialization() {
|
||||||
let expected = ResponseParameters::RetryAfter(Duration::from_secs(123_456));
|
let expected = ResponseParameters::RetryAfter(Seconds::from_seconds(123_456));
|
||||||
let actual: ResponseParameters = serde_json::from_str(r#"{"retry_after":123456}"#).unwrap();
|
let actual: ResponseParameters = serde_json::from_str(r#"{"retry_after":123456}"#).unwrap();
|
||||||
|
|
||||||
assert_eq!(expected, actual);
|
assert_eq!(expected, actual);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use mime::Mime;
|
use mime::Mime;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{FileMeta, PhotoSize};
|
use crate::types::{FileMeta, PhotoSize, Seconds};
|
||||||
|
|
||||||
/// This object represents a video file.
|
/// This object represents a video file.
|
||||||
///
|
///
|
||||||
|
@ -20,7 +20,7 @@ pub struct Video {
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
|
|
||||||
/// Duration of the video in seconds as defined by sender.
|
/// Duration of the video in seconds as defined by sender.
|
||||||
pub duration: u32,
|
pub duration: Seconds,
|
||||||
|
|
||||||
/// Video thumbnail.
|
/// Video thumbnail.
|
||||||
pub thumb: Option<PhotoSize>,
|
pub thumb: Option<PhotoSize>,
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::types::Seconds;
|
||||||
|
|
||||||
/// This object represents a service message about a video chat ended in the
|
/// This object represents a service message about a video chat ended in the
|
||||||
/// chat.
|
/// chat.
|
||||||
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct VideoChatEnded {}
|
pub struct VideoChatEnded {
|
||||||
|
/// Video chat duration in seconds.
|
||||||
|
duration: Seconds,
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{FileMeta, PhotoSize};
|
use crate::types::{FileMeta, PhotoSize, Seconds};
|
||||||
|
|
||||||
/// This object represents a [video message] (available in Telegram apps as of
|
/// This object represents a [video message] (available in Telegram apps as of
|
||||||
/// [v.4.0]).
|
/// [v.4.0]).
|
||||||
|
@ -21,7 +21,7 @@ pub struct VideoNote {
|
||||||
pub length: u32,
|
pub length: u32,
|
||||||
|
|
||||||
/// Duration of the video in seconds as defined by sender.
|
/// Duration of the video in seconds as defined by sender.
|
||||||
pub duration: u32,
|
pub duration: Seconds,
|
||||||
|
|
||||||
/// Video thumbnail.
|
/// Video thumbnail.
|
||||||
pub thumb: Option<PhotoSize>,
|
pub thumb: Option<PhotoSize>,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use mime::Mime;
|
use mime::Mime;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::FileMeta;
|
use crate::types::{FileMeta, Seconds};
|
||||||
|
|
||||||
/// This object represents a voice note.
|
/// This object represents a voice note.
|
||||||
///
|
///
|
||||||
|
@ -14,7 +14,7 @@ pub struct Voice {
|
||||||
pub file: FileMeta,
|
pub file: FileMeta,
|
||||||
|
|
||||||
/// Duration of the audio in seconds as defined by sender.
|
/// Duration of the audio in seconds as defined by sender.
|
||||||
pub duration: u32,
|
pub duration: Seconds,
|
||||||
|
|
||||||
/// MIME type of the file as defined by sender.
|
/// MIME type of the file as defined by sender.
|
||||||
#[serde(with = "crate::types::non_telegram_types::mime::opt_deser")]
|
#[serde(with = "crate::types::non_telegram_types::mime::opt_deser")]
|
||||||
|
|
Loading…
Add table
Reference in a new issue