27 KiB
[unreleased]
Bug fixes:
- Fix deserialization of
AnyGlobalAccountDataEvent
for variants with a type fragment. - Fix serialization of
room::message::Relation
androom::encrypted::Relation
which could cause duplicaterel_type
keys. Restricted
no longer fails to deserialize when theallow
field is missing- Markdown text constructors now also detect markdown syntax like backslash escapes and entity references to decide if the text should be sent as HTML.
Improvements:
- Add support for encrypted stickers as sent by several bridges under the flag
compat-encrypted-stickers
- Add unstable support for MSC3489
m.beacon
&m.beacon_info
events (unstable typesorg.matrix.msc3489.beacon
&org.matrix.msc3489.beacon_info
) - Stabilize support for muting in VoIP calls, according to Matrix 1.11
- All the root
Any*EventContent
types now have aEventContentFromType
implementations automatically derived by theevent_enum!
macro.
Breaking changes:
StickerEventContent::url
was replaced byStickerEventContent::source
which is aStickerMediaSource
0.28.1
Improvements:
- Implement
make_for_thread
andmake_replacement
forRoomMessageEventContentWithoutRelation
RoomMessageEventContent::set_mentions
is deprecated and replaced byadd_mentions
that should be called beforemake_replacement
.
0.28.0
Bug fixes:
- The
MembershipState::Invite
toMembershipState::Knock
membership change now returnsMembershipChange::Error
, due to a spec clarification
Breaking changes:
- The properties of
SecretStorageV1AesHmacSha2Properties
are nowOption
al. - Remove
event_id
methods from relation types - The required power level is different whether the user wants to redact their
own event or an event from another user:
-
RoomPowerLevels::user_can_redact
is split intouser_can_redact_own_event
anduser_can_redact_event_of_other
,PowerLevelAction::Redact
is split intoRedactOwn
andRedactOther
.
- Use
OwnedRoomId
instead ofString
for thestate_key
field ofHierarchySpaceChildEvent
- The
sdp_mid
andsdp_m_line_index
fields ofCandidate
are now optional, for better compatibility with the WebRTC specification.
Improvements:
- Don't fail event content parsing on invalid relation
- We previously already accepted custom or slightly malformed relations
- Now, even invalid / missing
rel_type
andevent_id
are accepted
- Implement
From<RoomPowerLevels>
forruma_common::push::PushConditionPowerLevelsCtx
- Add methods on
PowerLevels
to check if some actions are permitted based on the target user's power level. - Add unstable support for manually marking rooms as unread through MSC2867
and the room account data
m.marked_unread
event (unstable typecom.famedly.marked_unread
) - Implement
From<JoinRule>
forSpaceRoomJoinRule
- Add
filename
andformatted
fields to media event contents to support media captions as per MSC2530 / Matrix 1.10 - Add support for multi-stream VoIP, according to MSC3077 / Matrix 1.10
- Add unstable support for muting in VoIP calls, according to MSC3291
0.27.11
- Add unstable support for
m.call.notify
events (unstable typeorg.matrix.msc4075.call.notify
)
0.27.10
Deprecations:
- Deprecate
event_id
methods onRelation
types- They will be removed in the next breaking-change release
- Please open an issue if you are currently using them
0.27.9
Bug fixes:
- Fix the name of the fallback text field for extensible events in
RoomMessageEventContentWithoutRelation::make_reply_to_raw()
0.27.8
Improvements:
- Export the
UnstableAmplitude
type from theroom::message
module under theunstable-msc3245-v1-compat
feature; it was previously unnameable
0.27.7
Improvements:
- Remove invalid
non_exhaustive
attribute oncall::member::MembershipInit
0.27.6
Improvements:
- Add unstable support for
m.call.member
events (unstable typeorg.matrix.msc3401.call.member
)
0.27.5
Improvements:
- Add the Ruma logo to the documentation as a favicon / sidebar logo
0.27.4
Improvements:
- Add
Thread::without_fallback
as a constructor that initializes the minimal set of required fields
0.27.3
Improvements:
- Improve compatibility of unstable voice messages
0.27.2
Improvements:
- Added constructors for
UnstableAudioDetailsContentBlock
andUnstableVoiceContentBlock
0.27.1
Improvements:
- Calling
make_reply_to
ormake_reply_to_raw
withAddMentions::Yes
no longer adds people mentioned in the original message to mentions (only the sender of the original message) - Add convenience constructors like
text_plain
toRoomMessageEventContentWithoutRelation
- These are the same that are already available on
RoomMessageEventContent
- These are the same that are already available on
- Add methods on
RoomMessageEventWithoutRelation
that were previously only available onRoomMessageEventContent
:make_reply_to
make_reply_to_raw
add_mentions
0.27.0
The crate was split out of ruma-common
again after ruma-common 0.11.3
.
Bug fixes:
- Parse
m.tag
order
as a f64 value or a stringified f64 value, if thecompat-tag-info
feature is enabled.
Breaking changes:
- Rename the
key
field in theSecretStorageDefaultKeyEventContent
tokey_id
. - Make
in_reply_to
field ofThread
optional- It was wrong to be mandatory, spec was unclear (clarified here)
- Remove
AnswerSessionDescription
andOfferSessionDescription
types, useSessionDescription
instead.- Remove
SessionDescriptionType
, use aString
instead. A clarification in MSC2746 / Matrix 1.7 explains that thetype
field should not be validated but passed as-is to the WebRTC API. It also avoids an unnecessary conversion between the WebRTC API and the Ruma type.
- Remove
- The
reason
field inCallHangupEventContent
is now required and defaults toReason::UserHangup
(MSC2746 / Matrix 1.7) - The
Replacement
relation forRoomMessageEventContent
now takes aRoomMessageEventContentWithoutRelation
instead of aMessageType
- Make the
redacts
field ofOriginal(Sync)RoomRedactionEvent
optional to handle the format where theredacts
key is moved inside thecontent
, as introduced in room version 11, according to MSC2174 / MSC3820 / Matrix 1.8RoomRedactionEventContent::new()
was renamed tonew_v1()
, andwith_reason()
is no longer a constructor but a builder-type method
- Make the
creator
field ofRoomCreateEventContent
optional and deprecate it, as it was removed in room version 11, according to MSC2175 / MSC3820 / Matrix 1.8RoomCreateEventContent::new()
was renamed tonew_v1()
RedactedRoomCreateEventContent
is now a typedef overRoomCreateEventContent
RoomMessageEventContent::make_reply_to()
andmake_for_thread()
have an extra parameter to support the recommended behavior for intentional mentions in replies according to Matrix 1.7- In Markdown, soft line breaks are transformed into hard line breaks when compiled into HTML.
- Move the HTML functions in
events::room::message::sanitize
to the ruma-html crate- The
unstable-sanitize
cargo feature was renamed tohtml
- The
- Make
via
required inSpace(Child|Parent)EventContent
according to a spec clarification - Make
name
required inRoomNameEventContent
, the wording of the spec was confusing - Rename
SecretEncryptionAlgorithm
toSecretStorageEncryptionAlgorithm
and itsSecretStorageV1AesHmacSha2
variant toV1AesHmacSha2
. This variant is also a tuple variant instead of a struct variant
Improvements:
- Add
InitialStateEvent::{new, to_raw, to_raw_any}
- Add a convenience method to construct
RoomEncryptionEventContent
with the recommended defaults. - Add
FullStateEventContent::redact
- Add new methods for
RoomPowerLevels
:user_can_ban
user_can_invite
user_can_kick
user_can_redact
user_can_send_message
user_can_send_state
user_can_trigger_room_notification
- Add
MessageType::sanitize
behind thehtml
feature - Stabilize support for annotations and reactions (MSC2677 / Matrix 1.7)
- Add support for intentional mentions push rules (MSC3952 / Matrix 1.7)
- Stabilize support for VoIP signalling improvements (MSC2746 / Matrix 1.7)
- Make the generated and stripped plain text reply fallback behavior more compatible with most of the Matrix ecosystem.
- Add support for intentional mentions according to MSC3952 / Matrix 1.7
- Add support for room version 11 according to MSC3820 / Matrix 1.8
- Add preserved fields to match the new redaction algorithm, according to
MSC2176 / MSC3821, for the following types:
RedactedRoomRedactionEventContent
,RedactedRoomPowerLevelsEventContent
,RedactedRoomMemberEventContent
- Add preserved fields to match the new redaction algorithm, according to
MSC2176 / MSC3821, for the following types:
- Add
RoomMessageEventContent::make_reply_to_raw
to build replies to any event - Add support for custom
SecretStorageEncryptionAlgorithm
0.26.1
Deprecation of the crate. It is now part of ruma-common 0.9.0.
0.26.0
Breaking changes:
- Bump versions of
ruma-common
,ruma-idenfiers
0.25.0
Breaking changes:
- Remove
RedactedStrippedStateEvent
- It was not used anywhere since stripped state events are never actually redacted
- Use
Box<RawJsonValue>
instead ofJsonValue
for PDUcontent
field - Require
room::message::MessageType
to always contain a body- The
new
constructor now also has a body parameter
- The
- Rename
*ToDeviceEventContent
structs toToDevice*Content
- Remove unneeded redacted event content enums
- Update
reply
andhtml_reply
types toimpl Display
onRoomMessageEventContent
's reply constructors - Remove the
custom
module, which has been redundant for a while- If you are still using it and are unclear on the upgrade path, please get in touch
Improvements:
- Add
is_allowed
toRoomServerAclEventContent
- Add
room::message::MessageType::body
accessor method - Implement
Redact
for event structs (in addition toAny
event enums) - Add
room::message::RoomMessageEventContent::{body, msgtype}
accessor methods - Move
room::message::MessageType::VerificationRequest
out ofunstable-pre-spec
- Move MSC implementations from
unstable-pre-spec
to per-msc features:unstable-msc2448 unstable-msc2675 unstable-msc2676 unstable-msc2677
0.24.6
Improvements:
- Add (unstable) support for MSC3083
0.24.5
Improvements:
- Add
From
implementations for event and event content enums - It's now an error for a
room::message::Relation
to beReplaces
without there beingnew_content
- Previously, this used to set the relation to
None
- Previously, this used to set the relation to
- Unsupported relations are now deserialized to
relates_to: Some(_)
instead ofNone
- It's not possible to inspect the inner value though
0.24.4
Improvements:
- Add a workaround for synapse putting
prev_content
in unsigned (only active if thecompat
feature is enabled)
0.24.3
Improvements:
- Add unstable support for
m.secret.request
andm.secret.send
events
0.24.2
Improvements:
- Add missing constructor and
From
implementation forEncryptedToDeviceEventContent
0.24.1
Breaking changes:
room::name::NameEventContent
now uses a customRoomNameBox
type for itsname
field and makes it public, in response the constructor andname
accessor had their types updated too- Replace
InvalidEvent
by a more specificFromStringError
for room name validation - Remove unused
FromStrError
- Remove deprecated method
room::name::NameEventContent::name
- Make
encrypted::EncryptedToDeviceEventContent
its own type instead of a type alias forEncryptedEventContent
- It doesn't have the
relates_to
fieldEncryptedEventContent
has
- It doesn't have the
- Upgrade dependencies
Improvements:
- Add the
StaticEventContent
trait for abstracting over event content struct types (with a type known at compile-time)
0.24.0
Yanked, was released too early missing another important breaking change.
0.23.3
Improvements:
- Add unstable blurhash field to member event content struct
- Add constructors for the unstable spaces parent and child event content types
Bug fixes:
- Remove
new_content
from the plain-text part ofm.encrypted
events- It is supposed to go into the encrypted payload, but we expected it in the plain-text part before.
- This is technically a breaking change but since that can only be observed behind an unstable feature and this change doesn't break matrix-sdk, it's made in a point release.
0.23.2
Bug fixes:
- Fix reaction event (de)serialization (was broken in 0.23.0)
0.23.1
Improvements:
- Allow the macros exported by ruma-events to be used by crates that depend on matrix-sdk, but not (directly) on ruma or ruma-events
0.23.0
Breaking changes:
- Rename
key::verification::AcceptMethod::{MSasV1 => SasV1}
- As above, drop
M
prefix fromkey::verification::VerificationMethod
variants- Additionally, fix the name of the QR code one (
QrScanShowV1
toQrCodeScanV1
)
- Additionally, fix the name of the QR code one (
- Remove
room::power_level::NotificationPowerLevels
, now found inruma_common::power_levels
(orruma::power_levels
) - Remove
Custom
variant from event enums. If you were using this, please get in touch. - Remove
Custom
variant fromkey::verification::accept::AcceptMethod
andkey::verification::start::StartMethod
. - Rename
relation
field in some events torelates_to
- All events that support relations now have their own
Relation
types (theroom::relationships
module has been removed)- The
room::encryption
relation type can represent any kind of relation and hasFrom
implementations so any other relation can be converted to it
- The
Improvements:
- Add types for decrypted
m.room.encryption
event payloads (DecryptedOlmV1Event
,DecryptedMegolmV1Event
)- Currently, these don't have corresponding enums (and they might never get ones), instead to
represent a decrypted event payload with an unknown event type use
AnyMessageEventContent
for the generic parameter
- Currently, these don't have corresponding enums (and they might never get ones), instead to
represent a decrypted event payload with an unknown event type use
0.22.2
Improvements:
- Add unstable support for
m.space.child
andm.space.parent
events
0.22.1
Bug fixes:
- Fix serialized format of
DummyEventContent
0.22.0
Breaking changes:
- Change the structure of
StartEventContent
so that we can access transaction ids without the need to understand the concrete method. - Change
get_message_events
limit field type fromOption<UInt>
toUInt
- Add
alt_aliases
toCanonicalAliasEventContent
- Replace
format
andformatted_body
fields inTextMessageEventContent
,NoticeMessageEventContent
andEmoteMessageEventContent
withformatted: FormattedBody
- Rename
override_rules
inpush_rules::Ruleset
tooverride_
- Change
push_rules::PushCondition
variants from newtype variants with separate inner types to struct variants- This change removes the types
EventMatchCondition
,RoomMemberCountCondition
andSenderNotificationPermissionCondition
- This change removes the types
- Add PDU types:
pdu::{Pdu, PduStub}
presence::PresenceState
has been moved. Import it fromruma
orruma-common
.EventJson
has been moved and renamed. Import it fromruma
orruma-common
.- The
in_reply_to
field ofroom::message::RelatesTo
is now optional - Use
ruma_identifiers::{ServerName, ServerKeyId}
insignatures
fields ofpdu::RoomV1Pdu, RoomV1PduStub, RoomV3Pdu, RoomV3PduStub}
androom::member::SignedContent
. - Remove the
EventType::Custom
variant. You can still check for custom event types by going through.as_str()
. This ensures that new event types doesn't break existing code. - Remove the implementations of
From<EventType>
andFrom<key::verification::cancel::CancelCode>
forString
. Use theDisplay
orToString
implementations for those types instead. - Remove
PduStub
,RoomV1PduStub
andRoomV3PduStub
types - Use
ruma_identifiers::MxcUri
instead ofString
foravatar_url
,thumbnail_url
orurl
fields in the following types:presence::PresenceEventContent, room::{ avatar::{AvatarEventContent, ImageInfo}, member::MemberEventContent, message::{ AudioMessageEventContent, FileMessageEventContent, ImageMessageEventContent, VideoMessageEventContent } EncryptedFile, ImageInfo, }, sticker::StickerEventContent
- Add
tag::TagName
type and use it fortag::Tags
- Move
FullyRead
fromEphemeralRoom
enum toRoomAccountData
enum - Split
Basic
enum intoGlobalAccountData
andRoomAccountData
enums- Remove
DummyEvent
,DummyEventContent
,RoomKeyEvent
,RoomKeyEventContent
- Remove
- Remove
BasicEventContent
trait and derive - Make most of the types in this crate non-exhaustive
Improvements:
- Add
room::MessageFormat
androom::FormattedBody
- Skip serialization of optional values on
room::encryption::EncryptionEventContent
- Rename
TextMessageEventContent::new_plain
toplain
(the old name is still available, but deprecated) - Add more constructors for types in
room::message
:TextMessageEventContent::html
NoticeMessageEventContent::plain
NoticeMessageEventContent::html
MessageEventContent::text_plain
MessageEventContent::text_html
MessageEventContent::notice_plain
MessageEventContent::notice_html
- Add policy rule entities:
policy::rule::room
policy::rule::server
policy::rule::user
- Add policy rule recommendation:
Recommendation::Ban
0.21.3
Bug fixes:
- Fix
m.room.message
event serialization
Improvements:
- Skip serialization of
federate
field inroom::create::CreateEventContent
if it istrue
(the default value) room::power_levels::PowerLevelsEventContent
now implementsDefault
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 asBox<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.
- 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
- Add
struct UnsignedData
and update allunsigned
fields types fromBTreeMap<String, Value>
to this new type.- To access any additional fields of the
unsigned
property of an event, deserialize theEventJson
to another type that captures the field(s) you are interested in.
- To access any additional fields of the
- Add fields
format
andformatted_body
toroom::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
- Since we're now using
- 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
fromUInt
toSystemTime
- Change all usages of
HashMap
toBTreeMap
- To support this,
EventType
now implementsPartialOrd
andOrd
- To support this,
0.18.0
Breaking changes:
- Update unsigned field's type from
Option<Value>
toMap<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 araw
submodule. It was never meant to 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 theto_device
section of a sync response) - Added a helper method for computing the membership change from a
MemberEvent
Bug fixes:
- Fixed missing
m.
inm.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:
NameEvent
s are now validated properly and will be rejected if thename
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 useEventResult<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
inserde_json::Value
form
- It also contains the original value that was attempted to be deserialized into
- For any event or event content type
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 implementFromStr
andTryFrom<&str>
, which take a&str
of JSON data and return a newInvalidEvent
type on error. - Integers are now represented using the
Int
andUInt
types from thejs_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 renamedFromStrError
.
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
andNameEvent
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 theStrippedStateContent
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 theRoomEvent
trait has been renamedsender
to match the specification. - The
origin_server_ts
value is now required for room events and is supported via a neworigin_server_ts
method on theRoomEvent
trait. MemberEventContent
has a newis_direct
field.FileMessageEventContent
has a newfilename
field.- File and thumbnail info have been moved from several message types to dedicated
FileInfo
,ImageInfo
, andThumbnailInfo
types. LocationMessageEventContent
has a new info field.PresenceEventContent
'scurrently_active
field has changed frombool
toOption
.TypingEventContent
contains a vector ofUserId
s instead ofEventId
s.- Height and width fields named
h
andw
in the spec now use the full namesheight
andwidth
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 implementsDisplay
andFromStr
.
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.