aboutsummaryrefslogtreecommitdiff
path: root/src/model/channel
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-06-04 20:32:25 -0700
committerZeyla Hellyer <[email protected]>2017-06-06 10:12:13 -0700
commit990e611a56f37f64fbce74fbc487c7dcc4aa4e28 (patch)
tree399c69583bd256d31668affc227f235386814552 /src/model/channel
parentAdd CurrentUser::face(), User::face() (diff)
downloadserenity-990e611a56f37f64fbce74fbc487c7dcc4aa4e28.tar.xz
serenity-990e611a56f37f64fbce74fbc487c7dcc4aa4e28.zip
Use chrono for struct timestamp fields
Chrono is easier to use than timestamped strings, so they should be automatically deserialized and available for the user, instead of having the user deserialize the strings themselves. These fields have been changed to use a type of `DateTime<FixedOffset>`: - `ChannelPinsUpdateEvent.last_pin_timestamp` - `Group.last_pin_timestamp` - `Guild.joined_at` - `GuildChannel.last_pin_timestamp` - `Invite.created_at` - `Member.joined_at` - `Message.edited_timestamp - `Message.timestamp` - `MessageUpdateEvent.edited_timestamp` - `MessageUpdateEvent.timestamp` - `PrivateChannel.last_pin_timestamp` `Member.joined_at` is now also an `Option`. Previously, if a Guild Member Update was received for a member not in the cache, a new Member would be instantiated with a default String value. This is incorrect behaviour, and has now been replaced with being set to `None` in that case. Id methods' `created_at()` method now return a `chrono::NaiveDateTime` instead of a `time::Timespec`, and `User::created_at` has been updated to reflect that. Additionally, drop `time` as a direct dependency and use chrono for internals.
Diffstat (limited to 'src/model/channel')
-rw-r--r--src/model/channel/group.rs3
-rw-r--r--src/model/channel/guild_channel.rs3
-rw-r--r--src/model/channel/message.rs25
-rw-r--r--src/model/channel/private_channel.rs3
4 files changed, 17 insertions, 17 deletions
diff --git a/src/model/channel/group.rs b/src/model/channel/group.rs
index 25c4690..63efb90 100644
--- a/src/model/channel/group.rs
+++ b/src/model/channel/group.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use ::model::*;
#[cfg(feature="model")]
@@ -26,7 +27,7 @@ pub struct Group {
/// The Id of the last message sent.
pub last_message_id: Option<MessageId>,
/// Timestamp of the latest pinned message.
- pub last_pin_timestamp: Option<String>,
+ pub last_pin_timestamp: Option<DateTime<FixedOffset>>,
/// The name of the group channel.
pub name: Option<String>,
/// The Id of the group owner.
diff --git a/src/model/channel/guild_channel.rs b/src/model/channel/guild_channel.rs
index 8b55d04..5ce7031 100644
--- a/src/model/channel/guild_channel.rs
+++ b/src/model/channel/guild_channel.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use ::model::*;
#[cfg(feature="model")]
@@ -46,7 +47,7 @@ pub struct GuildChannel {
/// The timestamp of the time a pin was most recently made.
///
/// **Note**: This is only available for text channels.
- pub last_pin_timestamp: Option<String>,
+ pub last_pin_timestamp: Option<DateTime<FixedOffset>>,
/// The name of the channel.
pub name: String,
/// Permission overwrites for [`Member`]s and for [`Role`]s.
diff --git a/src/model/channel/message.rs b/src/model/channel/message.rs
index 8b9f0af..612113d 100644
--- a/src/model/channel/message.rs
+++ b/src/model/channel/message.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use ::model::*;
#[cfg(feature="cache")]
@@ -5,8 +6,6 @@ use std::fmt::Write;
#[cfg(feature="model")]
use std::mem;
#[cfg(feature="model")]
-use time;
-#[cfg(feature="model")]
use ::builder::{CreateEmbed, CreateMessage};
#[cfg(feature="model")]
use ::constants;
@@ -33,7 +32,7 @@ pub struct Message {
/// The content of the message.
pub content: String,
/// The timestamp of the last time the message was updated, if it was.
- pub edited_timestamp: Option<String>,
+ pub edited_timestamp: Option<DateTime<FixedOffset>>,
/// Array of embeds sent with the message.
pub embeds: Vec<Embed>,
/// Indicator of the type of message this is, i.e. whether it is a regular
@@ -56,7 +55,7 @@ pub struct Message {
#[serde(default)]
pub reactions: Vec<MessageReaction>,
/// Initial message creation timestamp, calculated from its Id.
- pub timestamp: String,
+ pub timestamp: DateTime<FixedOffset>,
/// Indicator of whether the command is to be played back via
/// text-to-speech.
///
@@ -240,16 +239,14 @@ impl Message {
self.content = format!("{} pinned a message to this channel. See all the pins.", self.author);
},
MessageType::MemberJoin => {
- if let Ok(tm) = time::strptime(&self.timestamp, "%Y-%m-%dT%H:%M:%S") {
- let sec = tm.to_timespec().sec as usize;
- let chosen = constants::JOIN_MESSAGES[sec % constants::JOIN_MESSAGES.len()];
-
- self.content = if chosen.contains("$user") {
- chosen.replace("$user", &self.author.mention())
- } else {
- chosen.to_owned()
- };
- }
+ let sec = self.timestamp.timestamp() as usize;
+ let chosen = constants::JOIN_MESSAGES[sec % constants::JOIN_MESSAGES.len()];
+
+ self.content = if chosen.contains("$user") {
+ chosen.replace("$user", &self.author.mention())
+ } else {
+ chosen.to_owned()
+ };
},
_ => {},
}
diff --git a/src/model/channel/private_channel.rs b/src/model/channel/private_channel.rs
index 7a0ed54..797ba94 100644
--- a/src/model/channel/private_channel.rs
+++ b/src/model/channel/private_channel.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use std::fmt::{Display, Formatter, Result as FmtResult};
use super::deserialize_single_recipient;
use ::model::*;
@@ -21,7 +22,7 @@ pub struct PrivateChannel {
/// Timestamp of the last time a [`Message`] was pinned.
///
/// [`Message`]: struct.Message.html
- pub last_pin_timestamp: Option<String>,
+ pub last_pin_timestamp: Option<DateTime<FixedOffset>>,
/// Indicator of the type of channel this is.
///
/// This should always be [`ChannelType::Private`].