ruwuma/ruma-events/CHANGELOG.md
Guillem Nieto 202af7a523 Skip serializing optional values on RoomEncryption
If this parameters are not skipped, they are sent as null and some
clients (at least, Riot) coerces them to 0.
2020-06-25 21:06:27 +02:00

10 KiB

[unreleased]

Breaking changes:

  • Change get_message_events limit field type from Option<UInt> to UInt
  • Add alt_aliases to CanonicalAliasEventContent
  • Replace format and formatted_body fields in TextMessagEventContent, NoticeMessageEventContent and EmoteMessageEventContent with formatted: FormattedBody
  • Rename override_rules in push_rules::Ruleset to override_
  • Change push_rules::PushCondition variants from newtype variants with separate inner types to struct variants
    • This change removes the types EventMatchCondition, RoomMemberCountCondition and SenderNotificationPermissionCondition
  • Add PDU types: pdu::{Pdu, PduStub}

Improvements:

  • Add room::MessageFormat and room::FormattedBody
  • Skip serialization of optional values on room::encryption::EncryptionEventContent

Deprecations:

  • presence::PresenceState has been moved. Import it from ruma or ruma-common.

0.21.3

Bug fixes:

  • Fix m.room.message event serialization

Improvements:

  • Skip serialization of federate field in room::create::CreateEventContent if it is true (the default value)
  • room::power_levels::PowerLevelsEventContent now implements Default

0.21.2

Improvements:

  • Update dependencies

0.21.1

Improvements:

  • Add EventJson::into_json

0.21.0

Breaking changes:

  • Replace EventResult with a new construct, EventJson
    • Instead of only capturing the json value if deserialization failed, we now now always capture it. To improve deserialization performance at the same time, we no longer use serde_json::Value internally and instead deserialize events as Box<serde_json::value::RawValue>. EventJson is simply a wrapper around that owned value type that additionally holds a generic argument: the type as which clients will usually want to deserialize the raw value.
  • Add struct UnsignedData and update all unsigned fields types from BTreeMap<String, Value> to this new type.
    • To access any additional fields of the unsigned property of an event, deserialize the EventJson to another type that captures the field(s) you are interested in.
  • Add fields format and formatted_body to room::message::NoticeMessageEventContent
  • Remove room::message::MessageType
  • Remove useless algorithm fields from encrypted event content structs
  • Remove PartialEq implementations for most types
    • Since we're now using serde_json::value::RawValue, deriving no longer works
  • Update the representation of push_rules::Tweak
  • Raise minimum supported Rust version to 1.40.0

0.20.0

Improvements:

  • Update ruma-identifiers to 0.16.0

0.19.0

Breaking changes:

  • Update ruma-identifiers to 0.15.1
  • Change timestamps, including origin_server_rs from UInt to SystemTime
  • Change all usages of HashMap to BTreeMap
    • To support this, EventType now implements PartialOrd and Ord

0.18.0

Breaking changes:

  • Update unsigned field's type from Option<Value> to Map<String, Value>

Improvements:

  • Add a convenience constructor to create a plain-text TextMessageEventContent
  • Add m.dummy events to the to-device event collection

0.17.0

Breaking changes:

  • collections::only no longer exports a raw submodule. It was never meant ot be exported in the first place.
  • Renamed stripped::{StrippedState => AnyStrippedStateEvent, StrippedStateContent => StrippedStateEvent}

Improvements:

  • Added to_device module with to-device variants of events (as found in the to_device section of a sync response)
  • Added a helper method for computing the membership change from a MemberEvent

Bug fixes:

  • Fixed missing m. in m.relates_to field of room messages
  • Fixed (de)serialization of encrypted events using m.olm.v1.curve25519-aes-sha2

0.16.0

Breaking changes:

  • TryFromRaw::try_from_raw's signature has been simplified. The previous signature was a relict that was no longer sensible.
  • All remaining non-optional room_id event fields (not event content fields) have been made optional

Improvements:

  • NameEvents are now validated properly and will be rejected if the name field is longer than 255 bytes.

0.15.1

Bug fixes:

  • Deserialization of custom events as part of the types from ruma_events::collections::{all, only} was implemented (this was missing after the big fallible deserializion rewrite in 0.15.0)

0.15.0

Improvements:

  • ruma-events now exports a new type, EventResult
    • For any event or event content type T inside a larger type that should support deserialization you can use EventResult<T> instead
    • Conceptually, it is the same as Result<T, InvalidEvent>
    • InvalidEvent can represent either a deserialization error (the event's structure did not match) or a validation error (some additional constraints defined in the matrix spec were violated)
      • It also contains the original value that was attempted to be deserialized into T in serde_json::Value form

Breaking changes:

  • The FromStr implementations for event types were removed (they were the previous implementation of fallible deserialization, but were never integrated in ruma-client-api because they didn't interoperate well with serde derives)

0.14.0

Breaking changes:

  • Updated to ruma-identifiers 0.14.0.

Improvements:

  • ruma-events is now checked against the RustSec advisory database.

0.13.0

Breaking changes:

  • Events and their content types no longer implement Deserialize and instead implement FromStr and TryFrom<&str>, which take a &str of JSON data and return a new InvalidEvent type on error.
  • Integers are now represented using the Int and UInt types from the js_int crate to ensure they are within the JavaScript-interoperable range mandated by the Matrix specification.
  • Some event types have new fields or new default values for previous fields to bring them up to date with version r0.5.0 of the client-server specification.
  • Some event types no longer have public fields and instead use a constructor function to perform validations not represented by the type system.
  • All enums now include a "nonexhaustive" variant to prevent exhaustive pattern matching. This will change to use the #[nonexhaustive] attribute when it is stabilized.
  • ParseError has been renamed FromStrError.

New features:

  • This release brings ruma-events completely up to date with version r0.5.0 of the client-server specification. All previously supported events have been updated as necessary and the following events have newly added support:
    • m.dummy
    • m.forwarded_room_key
    • m.fully_read
    • m.ignored_user_list
    • m.key.verification.accept
    • m.key.verification.cancel
    • m.key.verification.key
    • m.key.verification.mac
    • m.key.verification.request
    • m.key.verification.start
    • m.push_rules
    • m.key.encrypted
    • m.key.encryption
    • m.key.server_acl
    • m.key.tombstone
    • m.room_key
    • m.room_key_request
    • m.sticker

Improvements:

  • Improved documentation for the crate and for many types.
  • Added many new tests.
  • rustfmt and clippy are now used to ensure consistent formatting and improved code quality.

0.12.0

Improvements:

  • ruma-events now runs on stable Rust, requiring version 1.34 or higher.

Bug fixes:

  • CanonicalAliasEvent and NameEvent now allow content being absent, null, or empty, as per the spec.

0.11.1

Breaking changes:

  • RoomId is now optional in certain places where it may be absent, notably the responses of the /sync API endpoint.
  • A sender field has been added to the StrippedStateContent type.

Improvements:

  • Depend on serde's derive feature rather than serde_derive directly for simplified imports.
  • Update to Rust 2018 idioms.

0.11.0

Breaking changes:

  • The presence event has been modified to match the latest version of the spec. The spec was corrected to match the behavior of the Synapse homeserver.

Improvements:

  • Dependencies have been updated to the latest versions.

0.10.0

Breaking changes:

  • The EventType, and collections enums have new variants to support new events.
  • The extra_content method has been removed from the Event trait.
  • The user_id method from the RoomEvent trait has been renamed sender to match the specification.
  • The origin_server_ts value is now required for room events and is supported via a new origin_server_ts method on the RoomEvent trait.
  • MemberEventContent has a new is_direct field.
  • FileMessageEventContent has a new filename field.
  • File and thumbnail info have been moved from several message types to dedicated FileInfo, ImageInfo, and ThumbnailInfo types.
  • LocationMessageEventContent has a new info field.
  • PresenceEventContent's currently_active field has changed from bool to Option.
  • TypingEventContent contains a vector of UserIds instead of EventIds.
  • Height and width fields named h and w in the spec now use the full names height and width for their struct field names, but continue to serialize to the single-letter names.

New features:

  • ruma-events now supports all events according to r0.3.0 of the Matrix client-server specification.
  • Added new event: m.room.pinned_events.
  • Added new event: m.direct.

Bug fixes:

  • Several places where struct fields used the wrong key when serialized to JSON have been corrected.
  • Fixed grammar issues in documentation.

0.9.0

Improvements:

  • Added default values for various power level attributes.
  • Removed Serde trait bounds on StrippedStateContent's generic parameter.
  • Updated to version 0.4 of ruma-signatures.

0.8.0

Breaking changes

  • Updated serde to the 1.0 series.

0.7.0

Bug fixes:

  • Make the federate field optional when creating a room.

0.6.0

Breaking changes:

  • Updated ruma-identifiers to the 0.9 series.

0.5.0

Breaking changes:

  • Updated ruma-identifiers to the 0.8 series.

0.4.1

Improvements:

  • Relaxed version constraints on dependent crates to allow updating to new patch level versions.

0.4.0

Breaking changes:

  • Updated serde to the 0.9 series.

The public API remains the same.

0.3.0

Improvements:

  • ruma_events::presence::PresenceState now implements Display and FromStr.

0.2.0

Improvements:

  • Added missing "stripped" versions of some state events.
  • All "stripped" versions of state events are now serializable.

0.1.0

Initial release.