Skip serializing option values that are none.

This commit is contained in:
Jimmy Cuadra 2016-08-03 03:47:03 -07:00
parent ca4c8a6784
commit f35f2015eb
7 changed files with 33 additions and 0 deletions

View File

@ -116,6 +116,7 @@ pub struct RoomEvent<C, E> where C: Deserialize + Serialize, E: Deserialize + Se
pub room_id: RoomId,
/// Additional key-value pairs not signed by the homeserver.
#[serde(skip_serializing_if="Option::is_none")]
pub unsigned: Option<Value>,
/// The unique identifier for the user associated with this event.
@ -141,6 +142,7 @@ pub struct StateEvent<C, E> where C: Deserialize + Serialize, E: Deserialize + S
pub extra_content: E,
/// The previous content for this state key, if any.
#[serde(skip_serializing_if="Option::is_none")]
pub prev_content: Option<C>,
/// The unique identifier for the room associated with this event.
@ -150,6 +152,7 @@ pub struct StateEvent<C, E> where C: Deserialize + Serialize, E: Deserialize + S
pub state_key: String,
/// Additional key-value pairs not signed by the homeserver.
#[serde(skip_serializing_if="Option::is_none")]
pub unsigned: Option<Value>,
/// The unique identifier for the user associated with this event.

View File

@ -11,15 +11,18 @@ pub type PresenceEvent = Event<PresenceEventContent, PresenceEventExtraContent>;
#[derive(Debug, Deserialize, Serialize)]
pub struct PresenceEventContent {
/// The current avatar URL for this user.
#[serde(skip_serializing_if="Option::is_none")]
pub avatar_url: Option<String>,
/// Whether or not the user is currently active.
pub currently_active: bool,
/// The current display name for this user.
#[serde(skip_serializing_if="Option::is_none")]
pub displayname: Option<String>,
/// The last time since this used performed some action, in milliseconds.
#[serde(skip_serializing_if="Option::is_none")]
pub last_active_ago: Option<u64>,
/// The presence state for this user.

View File

@ -22,9 +22,11 @@ pub type MemberEvent = StateEvent<MemberEventContent, MemberEventExtraContent>;
#[derive(Debug, Deserialize, Serialize)]
pub struct MemberEventContent {
/// The avatar URL for this user.
#[serde(skip_serializing_if="Option::is_none")]
pub avatar_url: Option<String>,
/// The display name for this user.
#[serde(skip_serializing_if="Option::is_none")]
pub displayname: Option<String>,
/// The membership state of this user.
@ -57,6 +59,7 @@ pub enum MembershipState {
#[derive(Debug, Deserialize, Serialize)]
pub struct MemberEventExtraContent {
/// A subset of the state of the room at the time of the invite.
#[serde(skip_serializing_if="Option::is_none")]
pub invite_room_state: Option<Vec<StrippedState>>,
}

View File

@ -68,6 +68,7 @@ pub struct AudioMessageEventContent {
/// The textual representation of this message.
pub body: String,
/// Metadata for the audio clip referred to in `url`.
#[serde(skip_serializing_if="Option::is_none")]
pub info: Option<AudioInfo>,
/// The message type. Always *m.audio*.
pub msgtype: MessageType,
@ -79,10 +80,13 @@ pub struct AudioMessageEventContent {
#[derive(Debug, Deserialize, Serialize)]
pub struct AudioInfo {
/// The duration of the audio in milliseconds.
#[serde(skip_serializing_if="Option::is_none")]
pub duration: Option<u64>,
/// The mimetype of the audio, e.g. "audio/aac."
#[serde(skip_serializing_if="Option::is_none")]
pub mimetype: Option<String>,
/// The size of the audio clip in bytes.
#[serde(skip_serializing_if="Option::is_none")]
pub size: Option<u64>,
}
@ -102,12 +106,15 @@ pub struct FileMessageEventContent {
/// original upload.
pub body: String,
/// Metadata about the file referred to in `url`.
#[serde(skip_serializing_if="Option::is_none")]
pub info: Option<FileInfo>,
/// The message type. Always *m.file*.
pub msgtype: MessageType,
/// Metadata about the image referred to in `thumbnail_url`.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_info: Option<ImageInfo>,
/// The URL to the thumbnail of the file.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_url: Option<String>,
/// The URL to the file.
pub url: String,
@ -129,12 +136,15 @@ pub struct ImageMessageEventContent {
/// of the image, or some kind of content description for accessibility e.g. "image attachment."
pub body: String,
/// Metadata about the image referred to in `url`.
#[serde(skip_serializing_if="Option::is_none")]
pub info: Option<ImageInfo>,
/// The message type. Always *m.image*.
pub msgtype: MessageType,
/// Metadata about the image referred to in `thumbnail_url`.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_info: Option<ImageInfo>,
/// The URL to the thumbnail of the image.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_url: Option<String>,
/// The URL to the image.
pub url: String,
@ -151,8 +161,10 @@ pub struct LocationMessageEventContent {
/// The message type. Always *m.location*.
pub msgtype: MessageType,
/// Metadata about the image referred to in `thumbnail_url`.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_info: Option<ImageInfo>,
/// The URL to a thumbnail of the location being represented.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_url: Option<String>,
}
@ -181,6 +193,7 @@ pub struct VideoMessageEventContent {
/// accessibility, e.g. "video attachment."
pub body: String,
/// Metadata about the video clip referred to in `url`.
#[serde(skip_serializing_if="Option::is_none")]
pub info: Option<VideoInfo>,
/// The message type. Always *m.video*.
pub msgtype: MessageType,
@ -192,18 +205,25 @@ pub struct VideoMessageEventContent {
#[derive(Debug, Deserialize, Serialize)]
pub struct VideoInfo {
/// The duration of the video in milliseconds.
#[serde(skip_serializing_if="Option::is_none")]
pub duration: Option<u64>,
/// The height of the video in pixels.
#[serde(skip_serializing_if="Option::is_none")]
pub h: Option<u64>,
/// The mimetype of the video, e.g. "video/mp4."
#[serde(skip_serializing_if="Option::is_none")]
pub mimetype: Option<String>,
/// The size of the video in bytes.
#[serde(skip_serializing_if="Option::is_none")]
pub size: Option<u64>,
/// Metadata about an image.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_info: Option<ImageInfo>,
/// The URL to a thumbnail of the video clip.
#[serde(skip_serializing_if="Option::is_none")]
pub thumbnail_url: Option<String>,
/// The width of the video in pixels.
#[serde(skip_serializing_if="Option::is_none")]
pub w: Option<u64>,
}

View File

@ -11,6 +11,7 @@ pub type RedactionEvent = RoomEvent<RedactionEventContent, RedactionEventExtraCo
#[derive(Debug, Deserialize, Serialize)]
pub struct RedactionEventContent {
/// The reason for the redaction, if any.
#[serde(skip_serializing_if="Option::is_none")]
pub reason: Option<String>,
}

View File

@ -22,6 +22,7 @@ pub struct ThirdPartyInviteEventContent {
pub public_key: String,
/// Keys with which the token may be signed.
#[serde(skip_serializing_if="Option::is_none")]
pub public_keys: Option<Vec<PublicKey>>,
}
@ -32,6 +33,7 @@ pub struct PublicKey {
///
/// The URL must return a JSON object containing a boolean property named 'valid'.
/// If this URL is absent, the key must be considered valid indefinitely.
#[serde(skip_serializing_if="Option::is_none")]
pub key_validity_url: Option<String>,
/// A Base64-encoded Ed25519 key with which the token must be signed.

View File

@ -18,5 +18,6 @@ pub struct TagEventContent {
#[derive(Debug, Deserialize, Serialize)]
pub struct TagInfo {
/// Value to use for lexicographically ordering rooms with this tag.
#[serde(skip_serializing_if="Option::is_none")]
pub order: Option<u64>,
}