aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-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
-rw-r--r--src/model/event.rs7
-rw-r--r--src/model/guild/member.rs5
-rw-r--r--src/model/guild/mod.rs5
-rw-r--r--src/model/invite.rs5
-rw-r--r--src/model/mod.rs6
-rw-r--r--src/model/user.rs6
10 files changed, 36 insertions, 32 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`].
diff --git a/src/model/event.rs b/src/model/event.rs
index 6458b77..bbb60c7 100644
--- a/src/model/event.rs
+++ b/src/model/event.rs
@@ -1,5 +1,6 @@
//! All the events this library handles.
+use chrono::{DateTime, FixedOffset};
use serde::de::Error as DeError;
use serde_json::{self, Error as JsonError};
use std::collections::HashMap;
@@ -55,7 +56,7 @@ impl<'de> Deserialize<'de> for ChannelDeleteEvent {
#[derive(Clone, Debug, Deserialize)]
pub struct ChannelPinsUpdateEvent {
pub channel_id: ChannelId,
- pub last_pin_timestamp: Option<String>,
+ pub last_pin_timestamp: Option<DateTime<FixedOffset>>,
}
#[derive(Clone, Debug, Deserialize)]
@@ -278,8 +279,8 @@ pub struct MessageUpdateEvent {
pub nonce: Option<String>,
pub tts: Option<bool>,
pub pinned: Option<bool>,
- pub timestamp: Option<String>,
- pub edited_timestamp: Option<String>,
+ pub timestamp: Option<DateTime<FixedOffset>>,
+ pub edited_timestamp: Option<DateTime<FixedOffset>>,
pub author: Option<User>,
pub mention_everyone: Option<bool>,
pub mentions: Option<Vec<User>>,
diff --git a/src/model/guild/member.rs b/src/model/guild/member.rs
index 99bf67b..0082643 100644
--- a/src/model/guild/member.rs
+++ b/src/model/guild/member.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use std::fmt::{Display, Formatter, Result as FmtResult};
use super::deserialize_sync_user;
use ::model::*;
@@ -23,7 +24,7 @@ pub struct Member {
/// The unique Id of the guild that the member is a part of.
pub guild_id: Option<GuildId>,
/// Timestamp representing the date when the member joined.
- pub joined_at: String,
+ pub joined_at: Option<DateTime<FixedOffset>>,
/// Indicator of whether the member can speak in voice channels.
pub mute: bool,
/// The member's nickname, if present.
@@ -326,7 +327,7 @@ impl Member {
.unwrap()
.members
.values()
- .any(|m| m.user.read().unwrap().id == self.user.read().unwrap().id && m.joined_at == *self.joined_at))
+ .any(|m| m.user.read().unwrap().id == self.user.read().unwrap().id && m.joined_at == self.joined_at))
.map(|guild| guild
.read()
.unwrap()
diff --git a/src/model/guild/mod.rs b/src/model/guild/mod.rs
index 24e1881..a744b2c 100644
--- a/src/model/guild/mod.rs
+++ b/src/model/guild/mod.rs
@@ -14,6 +14,7 @@ pub use self::member::*;
pub use self::partial_guild::*;
pub use self::role::*;
+use chrono::{DateTime, FixedOffset};
use serde::de::Error as DeError;
use serde_json;
use super::utils::*;
@@ -73,7 +74,7 @@ pub struct Guild {
/// that of the default channel (typically `#general`).
pub id: GuildId,
/// The date that the current user joined the guild.
- pub joined_at: String,
+ pub joined_at: DateTime<FixedOffset>,
/// Indicator of whether the guild is considered "large" by Discord.
pub large: bool,
/// The number of members in the guild.
@@ -1149,7 +1150,7 @@ impl<'de> Deserialize<'de> for Guild {
.map_err(DeError::custom)?;
let joined_at = map.remove("joined_at")
.ok_or_else(|| DeError::custom("expected guild joined_at"))
- .and_then(String::deserialize)
+ .and_then(DateTime::deserialize)
.map_err(DeError::custom)?;
let large = map.remove("large")
.ok_or_else(|| DeError::custom("expected guild large"))
diff --git a/src/model/invite.rs b/src/model/invite.rs
index 7b67296..7ff3fd1 100644
--- a/src/model/invite.rs
+++ b/src/model/invite.rs
@@ -1,3 +1,4 @@
+use chrono::{DateTime, FixedOffset};
use super::*;
#[cfg(feature="cache")]
@@ -228,7 +229,7 @@ pub struct RichInvite {
/// The unique code for the invite.
pub code: String,
/// When the invite was created.
- pub created_at: String,
+ pub created_at: DateTime<FixedOffset>,
/// A representation of the minimal amount of information needed about the
/// guild being invited to.
pub guild: InviteGuild,
@@ -302,7 +303,7 @@ impl RichInvite {
/// # name: "foo".to_owned(),
/// # kind: ChannelType::Text,
/// # },
- /// # created_at: "bar".to_owned(),
+ /// # created_at: "2017-01-29T15:35:17.136000+00:00".parse().unwrap(),
/// # guild: InviteGuild {
/// # id: GuildId(2),
/// # icon: None,
diff --git a/src/model/mod.rs b/src/model/mod.rs
index 26c6f42..bc414c7 100644
--- a/src/model/mod.rs
+++ b/src/model/mod.rs
@@ -40,12 +40,12 @@ pub use self::user::*;
pub use self::voice::*;
pub use self::webhook::*;
+use chrono::NaiveDateTime;
use self::utils::*;
use serde::de::Visitor;
use std::collections::HashMap;
use std::fmt::{Formatter, Result as FmtResult};
use std::sync::{Arc, RwLock};
-use time::Timespec;
use ::internal::prelude::*;
#[cfg(feature="utils")]
@@ -63,10 +63,10 @@ macro_rules! id {
impl $name {
/// Retrieves the time that the Id was created at.
- pub fn created_at(&self) -> Timespec {
+ pub fn created_at(&self) -> NaiveDateTime {
let offset = (self.0 >> 22) / 1000;
- Timespec::new(1420070400 + offset as i64, 0)
+ NaiveDateTime::from_timestamp(1420070400 + offset as i64, 0)
}
}
diff --git a/src/model/user.rs b/src/model/user.rs
index e1483d2..ef26ca1 100644
--- a/src/model/user.rs
+++ b/src/model/user.rs
@@ -6,13 +6,13 @@ use ::internal::prelude::*;
use ::model::misc::Mentionable;
#[cfg(feature="model")]
+use chrono::NaiveDateTime;
+#[cfg(feature="model")]
use std::fmt::Write;
#[cfg(feature="model")]
use std::mem;
#[cfg(feature="cache")]
use std::sync::{Arc, RwLock};
-#[cfg(feature="model")]
-use time::Timespec;
#[cfg(feature="cache")]
use ::CACHE;
#[cfg(feature="model")]
@@ -377,7 +377,7 @@ impl User {
/// Retrieves the time that this user was created at.
#[inline]
- pub fn created_at(&self) -> Timespec {
+ pub fn created_at(&self) -> NaiveDateTime {
self.id.created_at()
}