ruwuma/crates/ruma-events/CHANGELOG.md
Kévin Commaille f753a2f326 events: Improve markdown parsing code
Loop through the events only once to detect both whether there is
markdown and whether the markdown is inline.
Fix more cases of false negatives in markdown detection, like
whitespaces that are removed or the string beginning by a backslash
escape.
2024-11-07 18:59:47 -05:00

28 KiB

[unreleased]

Bug fixes:

  • Markdown text constructors now detect even more markdown syntax like removed whitespace at the end or beginning of a line to decide if the text should be sent as HTML.

Improvements:

  • Add unstable support for MSC4059 for bundling link previews in chat text messages

0.29.0

Bug fixes:

  • Fix missing relates_to field on StickerEventContent
  • Fix deserialization of AnyGlobalAccountDataEvent for variants with a type fragment.
  • Fix serialization of room::message::Relation and room::encrypted::Relation which could cause duplicate rel_type keys.
  • Restricted no longer fails to deserialize when the allow 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.
  • Markdown text with only inline syntax generates HTML that is not wrapped inside a <p> element anymore, as recommended by the spec.

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 types org.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 a EventContentFromType implementations automatically derived by the event_enum! macro.
  • CallMemberEventContent now supports two different formats: Session memberships and Legacy memberships. The new format (Session) is required to reliably display the call member count (reliable call member events). CallMemberEventContent is now an enum to model the two different formats.
  • CallMemberStateKey (instead of OwnedUserId) is now used as the state key type for CallMemberEventContent. This guarantees correct formatting of the event key.
  • Add helpers for captions on audio, file, image and video messages.
  • Add helpers for filenames on audio, file, image and video messages.
  • Stabilize support for the m.marked_unread room account data according to Matrix 1.12. The unstable com.famedly.marked_unread room account data is still available behind the unstable-msc2867 cargo feature to be able to migrate data from the unstable to the stable prefix.

Breaking changes:

  • StickerEventContent::url was replaced by StickerEventContent::source which is a StickerMediaSource

0.28.1

Improvements:

  • Implement make_for_thread and make_replacement for RoomMessageEventContentWithoutRelation
  • RoomMessageEventContent::set_mentions is deprecated and replaced by add_mentions that should be called before make_replacement.

0.28.0

Bug fixes:

  • The MembershipState::Invite to MembershipState::Knock membership change now returns MembershipChange::Error, due to a spec clarification

Breaking changes:

  • The properties of SecretStorageV1AesHmacSha2Properties are now Optional.
  • 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 into user_can_redact_own_event and user_can_redact_event_of_other,
    • PowerLevelAction::Redact is split into RedactOwn and RedactOther.
  • Use OwnedRoomId instead of String for the state_key field of HierarchySpaceChildEvent
  • The sdp_mid and sdp_m_line_index fields of Candidate 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 and event_id are accepted
  • Implement From<RoomPowerLevels> for ruma_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 type com.famedly.marked_unread)
  • Implement From<JoinRule> for SpaceRoomJoinRule
  • Add filename and formatted 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 type org.matrix.msc4075.call.notify)

0.27.10

Deprecations:

  • Deprecate event_id methods on Relation 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 the room::message module under the unstable-msc3245-v1-compat feature; it was previously unnameable

0.27.7

Improvements:

  • Remove invalid non_exhaustive attribute on call::member::MembershipInit

0.27.6

Improvements:

  • Add unstable support for m.call.member events (unstable type org.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 and UnstableVoiceContentBlock

0.27.1

Improvements:

  • Calling make_reply_to or make_reply_to_raw with AddMentions::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 to RoomMessageEventContentWithoutRelation
    • These are the same that are already available on RoomMessageEventContent
  • Add methods on RoomMessageEventWithoutRelation that were previously only available on RoomMessageEventContent:
    • 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 the compat-tag-info feature is enabled.

Breaking changes:

  • Rename the key field in the SecretStorageDefaultKeyEventContent to key_id.
  • Make in_reply_to field of Thread optional
    • It was wrong to be mandatory, spec was unclear (clarified here)
  • Remove AnswerSessionDescription and OfferSessionDescription types, use SessionDescription instead.
    • Remove SessionDescriptionType, use a String instead. A clarification in MSC2746 / Matrix 1.7 explains that the type 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.
  • The reason field in CallHangupEventContent is now required and defaults to Reason::UserHangup (MSC2746 / Matrix 1.7)
  • The Replacement relation for RoomMessageEventContent now takes a RoomMessageEventContentWithoutRelation instead of a MessageType
  • Make the redacts field of Original(Sync)RoomRedactionEvent optional to handle the format where the redacts key is moved inside the content, as introduced in room version 11, according to MSC2174 / MSC3820 / Matrix 1.8
    • RoomRedactionEventContent::new() was renamed to new_v1(), and with_reason() is no longer a constructor but a builder-type method
  • Make the creator field of RoomCreateEventContent optional and deprecate it, as it was removed in room version 11, according to MSC2175 / MSC3820 / Matrix 1.8
    • RoomCreateEventContent::new() was renamed to new_v1()
    • RedactedRoomCreateEventContent is now a typedef over RoomCreateEventContent
  • RoomMessageEventContent::make_reply_to() and make_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 to html
  • Make via required in Space(Child|Parent)EventContent according to a spec clarification
  • Make name required in RoomNameEventContent, the wording of the spec was confusing
  • Rename SecretEncryptionAlgorithm to SecretStorageEncryptionAlgorithm and its SecretStorageV1AesHmacSha2 variant to V1AesHmacSha2. 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 the html 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 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 of JsonValue for PDU content field
  • Require room::message::MessageType to always contain a body
    • The new constructor now also has a body parameter
  • Rename *ToDeviceEventContent structs to ToDevice*Content
  • Remove unneeded redacted event content enums
  • Update reply and html_reply types to impl Display on RoomMessageEventContent'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 to RoomServerAclEventContent
  • Add room::message::MessageType::body accessor method
  • Implement Redact for event structs (in addition to Any event enums)
  • Add room::message::RoomMessageEventContent::{body, msgtype} accessor methods
  • Move room::message::MessageType::VerificationRequest out of unstable-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 be Replaces without there being new_content
    • Previously, this used to set the relation to None
  • Unsupported relations are now deserialized to relates_to: Some(_) instead of None
    • 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 the compat feature is enabled)

0.24.3

Improvements:

  • Add unstable support for m.secret.request and m.secret.send events

0.24.2

Improvements:

  • Add missing constructor and From implementation for EncryptedToDeviceEventContent

0.24.1

Breaking changes:

  • room::name::NameEventContent now uses a custom RoomNameBox type for its name field and makes it public, in response the constructor and name accessor had their types updated too
  • Replace InvalidEvent by a more specific FromStringError 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 for EncryptedEventContent
    • It doesn't have the relates_to field EncryptedEventContent has
  • 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 of m.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 from key::verification::VerificationMethod variants
    • Additionally, fix the name of the QR code one (QrScanShowV1 to QrCodeScanV1)
  • Remove room::power_level::NotificationPowerLevels, now found in ruma_common::power_levels (or ruma::power_levels)
  • Remove Custom variant from event enums. If you were using this, please get in touch.
  • Remove Custom variant from key::verification::accept::AcceptMethod and key::verification::start::StartMethod.
  • Rename relation field in some events to relates_to
  • All events that support relations now have their own Relation types (the room::relationships module has been removed)
    • The room::encryption relation type can represent any kind of relation and has From implementations so any other relation can be converted to it

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

0.22.2

Improvements:

  • Add unstable support for m.space.child and m.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 from Option<UInt> to UInt
  • Add alt_aliases to CanonicalAliasEventContent
  • Replace format and formatted_body fields in TextMessageEventContent, 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}
  • presence::PresenceState has been moved. Import it from ruma or ruma-common.
  • EventJson has been moved and renamed. Import it from ruma or ruma-common.
  • The in_reply_to field of room::message::RelatesTo is now optional
  • Use ruma_identifiers::{ServerName, ServerKeyId} in signatures fields of pdu::RoomV1Pdu, RoomV1PduStub, RoomV3Pdu, RoomV3PduStub} and room::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> and From<key::verification::cancel::CancelCode> for String. Use the Display or ToString implementations for those types instead.
  • Remove PduStub, RoomV1PduStub and RoomV3PduStub types
  • Use ruma_identifiers::MxcUri instead of String for avatar_url, thumbnail_url or url 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 for tag::Tags
  • Move FullyRead from EphemeralRoom enum to RoomAccountData enum
  • Split Basic enum into GlobalAccountData and RoomAccountData enums
    • Remove DummyEvent, DummyEventContent, RoomKeyEvent, RoomKeyEventContent
  • Remove BasicEventContent trait and derive
  • Make most of the types in this crate non-exhaustive

Improvements:

  • Add room::MessageFormat and room::FormattedBody
  • Skip serialization of optional values on room::encryption::EncryptionEventContent
  • Rename TextMessageEventContent::new_plain to plain (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 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 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 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.