Use new trait bounds for KeyId to only allow specific types. Change the KeyId validation to be generic over the key name type. Remove the KeyName type and replace it with the more specific ServerSigningKeyVersion.
19 KiB
19 KiB
[unreleased]
Bug fixes:
- The
instance_id
field was removed fromProtocolInstanceInit
and is now anOption<String>
forProtocolInstance
. It made theunstable-unspecified
feature non-additive.
Breaking changes:
- Rename the
query_map
attribute of therequest
macro toquery_all
, and remove the required bound to implementIntoIterator<Item = (String, String)>
. This allows to use a struct or enum as well as a map to represent the list of query parameters. Note that the (de)serialization of the type used must work withserde_html_form
. - The
header
attribute for therequest
andresponse
macros accepts any type that implementsToString
andFromStr
. - The
compat-key-id
cargo feature was renamed tocompat-server-signing-key-version
. (Owned)KeyName
was renamed to(Owned)ServerSigningKeyVersion
and is now validated according to the set of allowed characters defined in the docs, unless thecompat-server-signing-key-version
cargo feature is enabled.- The bounds on
KeyId
changed. The algorithm part must implementKeyAlgorithm
and the key name part must implementKeyName
. - The
(owned_)server_signing_key_id
macros were removed. For compile-time validated construction, useServerSigningKeyId::from_parts
with aSigningKeyAlgorithm
and theserver_signing_key_version
macro.
Improvements:
- Add the
InvalidHeaderValue
variant to theDeserializationError
struct, for cases where we receive a HTTP header with an unexpected value. - Implement
Eq
/Hash
/PartialEq
forThirdPartyIdentifier
, to check whether aThirdPartyIdentifier
has already been added by another user. - Add
MatrixVersion::V1_11
andMatrixVersion::V1_12
. - Clarify in the docs of
AuthScheme
that sending an access token via a query parameter is deprecated, according to MSC4126 / Matrix 1.11. - Constructing a Matrix URI for an event with a room alias is deprecated, according to MSC4132 / Matrix 1.11
- Implement
Eq
andPartialEq
forMetadata
- Allow constructing
api::error::MatrixErrorBody::NotJson
outside of this crate.
0.13.0
Bug fixes:
- Allow to deserialize
Ruleset
with missing fields.
Breaking changes:
- The power levels fields in
PushConditionRoomCtx
are grouped in an optionalpower_levels
field. If the field is missing, push rules that depend on it will never match. However, this allows to match the.m.rule.invite_for_me
push rule because usually theinvite_state
doesn't includem.room.power_levels
. - Add support for endpoints that take an optional authentication
- Add support for endpoints that require authentication for appservices
deserialize_as_f64_or_string
has been extended to also support parsing integers, and renamed todeserialize_as_number_or_string
to reflect that.- The http crate had a major version bump to version 1.1
IntoHttpError::Header
now contains aHeaderSerializationError
Improvements:
- Use the web-time crate to return a
SystemTime
that works under WASM in theMilliSecondsSinceUnixEpoch::to_system_time()
method. - Stabilize support for
.m.rule.suppress_edits
push rule (MSC3958 / Matrix 1.9) - Add
MatrixVersion::V1_9
andV1_10
- Point links to the Matrix 1.10 specification
- Implement
as_str()
andAsRef<str>
forpush::PredefinedRuleId
- Implement
kind()
forpush::Predefined{*}RuleId
- Implement
Clone
forMatrixToUri
andMatrixUri
0.12.1
Bug fixes:
- Allow to deserialize
(New)ConditionalPushRule
with a missingconditions
field.
0.12.0
Bug fixes:
- Set the predefined server-default
.m.rule.tombstone
push rule as enabled by default, as defined in the spec.
Breaking changes:
FlattenedJson::get
returns aFlattenedJsonValue
instead of a string- Remove the
DontNotify
andCoalesce
variants ofpush::Action
according to MSC3987- Old push rules will still deserialize successfully but the
Coalesce
variant will not returntrue
forAction::should_notify()
anymore
- Old push rules will still deserialize successfully but the
- Removed the
events
module, it is once again its own crate (ruma-events
) - Removed
From
andTryFrom
implementations forRedactedBecause
in favor of named constructors (from_json
andfrom_raw_event
) - Updated room IDs to not require a servername
- Removed
localpart
method fromRoomId
andRoomOrAliasId
- Changed
server_name
method onRoomId
andRoomOrAliasId
to returnOption<&str>
- Removed
Improvements:
- Allow padding when decoding the
Base64
type from a string - Add convenience methods for
push::Ruleset
:- To update the server-default push rules
- To remove a user-defined push rule
- Add
AsRef<[u8]>
implementations for identifier types PushCondition::EventMatch
andFlattenedJson
now use escaped dotted paths (MSC3873 / Matrix 1.7)- Add support for
event_property_is
push condition (MSC3758 / Matrix 1.7) - Add support for
event_property_contains
push condition (MSC3966 / Matrix 1.7) - Add
MatrixVersion::V1_7
andMatrixVersion::V1_8
- Add support for room version 11 according to MSC3820 / Matrix 1.8
- Adapt the redaction algorithm in
canonical_json
- Adapt the redaction algorithm in
- Add unstable support for suppress edits push rule (MSC3958)
0.11.3
Bug fixes:
- Move
.m.rule.roomnotif
push rule before.m.rule.tombstone
in the server default push rules, according to a spec clarification in Matrix 1.6
Improvements:
- Add
MatrixVersion::V1_6
- Stabilize support for fixed base64 for SAS verification (MSC3783 / Matrix 1.6)
- Deprecate
MessageAuthenticationCode::HkdfHmacSha256
- Deprecate
0.11.2
Bug fixes:
- Don't accept colons in the localpart given to
UserId::parse_with_servername
even withfeature = "compat"
Improvements:
- Derive
Hash
forReceiptType
andReceiptThread
- Update
EventContent
derive macro to emit new type definitions and type aliases under the same visibility as the input type (this fixes a future- compatibility warning when derivingEventContent
on a non-pub
type)
0.11.1
Improvements:
- Make alternate Debug representation of
MilliSecondsSinceUnixEpoch
andSecondsSinceUnixEpoch
more compact (remove newlines)
0.11.0
Bug fixes:
- HTML-relevant characters (
<
,>
, etc) in plaintext replies are now escaped during creation of the rich reply - Don't include sensitive information in
Debug
-format of types from theevents::key
andevents::secret
modules - Fix deserialization of
RoomMessageEventContent
andRoomEncryptedEventContent
when there is no relation - Fix deserialization of
StateUnsigned
when theprev_content
is redacted - Allow to deserialize
PushCondition
with unknown kind - Allow to deserialize
push::Action
with unknown value - Only percent-encode reserved characters in endpoint URL path
Breaking changes:
- Remove deprecated
EventType
enum - Remove deprecated constructors for
RoomMessageEventContent
- Remove
serde::vec_as_map_of_empty
from the public API - Remove the
api::AuthScheme::QueryOnlyAccessToken
variant, which is no longer used - The
#[ruma_api(header)]
attribute of theruma_api
macro now accepts an arbitraryhttp::header::HeaderName
- To continue using constants from
http::header
, they must be imported in the module calling the macro.
- To continue using constants from
- Make
name
optional onSecretStorageKeyEventContent
. Default constructor has been adjusted as well to not require this field. - Rename
push::PusherData
toHttpPusherData
and make theurl
field required - Remove
Ruleset::add
and the implementation ofExtend<AnyPushRule>
forRuleset
- Make
EndpointError
construction infallibleEndpointError::try_from_http_request
has been replaced byEndpointError::from_http_request
FromHttpResponseError<E>::Server
now containsE
instead ofServerError<E>
ServerError<E>
has been removedMatrixError
is now an enum with theJson
variant containing the previous fields
- Change the
ignored_users
field ofIgnoredUserListEventContent
to a map of empty structs, to allow eventual fields to be added, as intended by the spec - Make
SimplePushRule
and associated types generic over the expected type of therule_id
- Deduplicate and group relation structs in
events::relation
:- Move relation structs under
events::room::message
toevents::relation
- Move common relation structs under
events::room::encrypted
toevents::relation
and remove duplicate types - Remove
events::reaction::Relation
and useevents::relation::Annotation
instead - Remove
events::key::verification::Relation
and useevents::relation::Reference
instead
- Move relation structs under
- Rename
events::relation::Relations
toBundledRelations
- Make the
redacted_because
field inUnsignedRedacted
non-optional and replace parameterlessnew
constructor by one that takes a redaction event (likenew_because
previously, which is now removed) - Move the
Unsigned
associated type fromStateEventContent
toOriginalStateEventContent
Redacted*EventContent
s don't have anunsigned
type anymore
- Remove the
serde::urlencoded
module- Query string (de)serialization is now done by the
serde_html_form
crate
- Query string (de)serialization is now done by the
- Rename
RoomEventType
toTimelineEventType
- Remove
SecretStorageKeyEventContent
's implementation ofDeserialize
- Use
EventContentFromType::from_parts
instead
- Use
- Remove
StateUnsignedFromParts
- Replace it with a bound on
DeserializeOwned
- Replace it with a bound on
- Remove
Raw::deserialize_content
- Instead, use
.deserialize_as::<T>()
or.cast_ref::<T>().deserialize_with_type()
- Instead, use
- Remove
EventContent::from_parts
- Replace it with
EventContentFromType::from_parts
- Replace it with
- The
serde::StringEnum
derive now also generates aDebug
implementation
Improvements:
- Add
MatrixVersion::V1_4
andMatrixVersion::V1_5
- Stabilize default room server ACL push rule
- Stabilize
room_types
indirectory::Filter
androom_type
indirectory::PublicRoomsChunk
- Stabilize support for private read receipts
- Add stable support for threads
- Move
Relation::Thread
and associated types and methods out ofunstable-msc3440
- Add parameter to
RoomMessageEventContent::make_reply_to
to be thread-aware - Add
RoomMessageEventContent::make_for_reply
- Move
- Stabilize support for event replacements (edits)
- Add support for read receipts for threads (MSC3771 / Matrix 1.4)
- Add
push::PredefinedRuleId
and associated types as a list of predefined push rule IDs - Add convenience methods to
Ruleset
Ruleset::get
to access a push ruleRuleset::insert
to add or update user push rulesRuleset::set_enabled
to change the enabled state of push rulesRuleset::set_actions
to change the actions of push rules
- Add support for bundled reference relations (MSC3267 / Matrix 1.5)
- Add the
formatted
field onKeyVerificationRequestEventContent
(Matrix 1.5) - Add
content
accessors forAny*StateEvent
enums - Add the
DebugAsRefStr
derive macro toruma_common::serde
0.10.5
Improvements:
- Add support for
#[incoming_derive(!Debug)]
to theIncoming
derive macro
0.10.4
Bug fixes:
- Fix
MatrixToUri
parsing for non-url-encoded room aliases
0.10.3
Bug fixes:
- Fix ruma-common not compiling with the Cargo features
events
andunstable-msc2677
active, andunstable-msc2676
inactive
0.10.2
Improvements:
- Add
relations
accessors to event enum types:AnyMessageLikeEvent
andAnySyncMessageLikeEvent
AnyStateEvent
andAnySyncStateEvent
AnyTimelineEvent
andAnySyncTimelineEvent
0.10.1
Improvements:
- Add
RoomMessageEventContent::make_reply_to
- Deprecate reply constructors in favor of the new method
0.10.0
Bug fixes:
- Expose
MatrixIdError
,MatrixToError
,MatrixUriError
andMxcUriError
at the crate root - Fix matching of
event_match
condition- The spec clarified its behavior: https://github.com/matrix-org/matrix-spec-proposals/pull/3690
Breaking changes:
- Add
user_id
field toPushConditionRoomCtx
- Remove
PartialEq
implementation onNotificationPowerLevels
- Remove
PartialEq
implementation forevents::call::SessionDescription
- Use new
events::call::AnswerSessionDescription
forCallAnswerEventContent
andOfferSessionDescription
forCallInviteEventContent
- Use new
VoipVersionId
andVoipId
types forevents::call
events - Remove
RoomName
/OwnedRoomName
and replace usages withstr
/String
- Room name size limits were never enforced by servers (Spec change removing the size limit)
- Remove
RoomMessageFeedbackEvent
and associated types and variants according to MSC3582 - Move
CanonicalJson
,CanonicalJsonObject
andCanonicalJsonError
out of theserde
module and behind the cargo feature flagcanonical-json
- Make identifiers matrix URI constructors generic over owned parameters
- Split
RoomId
matrix URI constructors between methods with and without routing
- Split
- Allow to add routing servers to
RoomId::matrix_to_event_uri()
- Move
receipt::ReceiptType
toevents::receipt
- Make
Clone
as supertrait ofapi::OutgoingRequest
- Rename
Any[Sync]RoomEvent
toAny[Sync]TimelineEvent
RoomMemberEvent
and related types now have a custom unsigned type including theinvite_room_state
field, instead of theStateUnsigned
type used by other state events
Improvements:
- All push rules are now considered to not apply to events sent by the user themselves
- Change
events::relation::BundledAnnotation
to a struct instead of an enum- Remove
BundledReaction
- Remove
- Add unstable support for polls (MSC3381)
- Add unstable support for Improved Signalling for 1:1 VoIP (MSC2746)
- Add support for knocking in
events::room::member::MembershipChange
- Add
MatrixVersion::V1_3
- Deprecate the
sender_key
anddevice_id
fields for encrypted events (MSC3700) - Move the
relations
field ofevents::unsigned
types out ofunstable-msc2675
- Deserialize stringified integers for power levels without the
compat
feature - Add
JoinRule::KnockRestricted
(MSC3787) - Add
MatrixVersionId::V10
(MSC3604) - Add methods to sanitize messages according to the spec behind the
html
feature- Can also remove rich reply fallbacks
- Implement
From<Owned*Id>
foridentifiers::matrix_uri::MatrixId
- Add unstable default push rule to ignore room server ACLs events (MSC3786)
- Add unstable support for private read receipts (MSC2285)
- Add unstable support for filtering public rooms by room type (MSC3827)
0.9.2
Bug fixes:
- Fix serialization and deserialization of events with a dynamic
event_type
0.9.1
Improvements:
- Add
StrippedPowerLevelsEvent::power_levels
- Add (
Sync
)RoomMemberEvent::membership
- Export
events::room::member::Change
- Prior to this, you couldn't actually do anything with the
membership_change
functions on various member event types
- Prior to this, you couldn't actually do anything with the
0.9.0
Bug fixes:
- Change default
invite
power level to0
- The spec was determined to be wrong about the default: https://github.com/matrix-org/matrix-spec/pull/1021
Breaking changes:
- Several ruma crates have been merged into
ruma-common
ruma-api
has moved intoapi
, behind a feature flagruma-events
has moved intoevents
, behind a feature flagruma-identifiers
types are available at the root of the crateruma-serde
has moved intoserde
- The
events::*MessageEvent
types have been renamed to*MessageLikeEvent
- Change
events::room
media types to accept either a plain file or an encrypted file, not both simultaneously - Change
events::room
media types to useDuration
where applicable - Move
prev_content
intounsigned
- Rename
identifiers::Error
toIdParseError
- Fix the
RoomMessageEventContent::*_reply_plain
methods that now return a message with aformatted_body
, according to the spec. Therefore, they only acceptOriginalRoomMessageEvent
s like their HTML counterparts. - Update the
state_key
field of state events to be of a different type depending on the content type. You now no longer need to validate manually thatm.room.member
events have a user ID as their state key!
Improvements:
- Add unstable support for extensible events (MSCs 1767, 3551, 3552, 3553, 3246, 3488)
- Add unstable support for translatable text content (MSC3554)
- Add unstable support for voice messages (MSC3245)
- Add unstable support for threads (MSC3440)
- Add
ReceiptEventContent::user_receipt
- Make
Restricted::allow
public - Conversion from
RoomPowerLevels
toRoomPowerLevelsEventContent
0.8.0
Breaking changes:
- Update
ruma-identifiers
dependency
0.7.0
Breaking changes:
- Update
ruma-identifiers
dependency - Use new
Base64
type forkey
field ofSignedKey
0.6.0
Breaking changes:
- Make a few enums non-exhaustive
- Upgrade dependencies
0.5.4
Improvements:
- Add
to_device
module containingDeviceIdOrAllDevices
0.5.3
Improvements:
- Add
instance_id
field toProtocolInstance[Init]
under theunstable-pre-spec
feature
0.5.2
Improvements:
- Add
thirdparty::ThirdPartyIdentifier
0.5.1
Improvements:
- Add
receipt::ReceiptType
- Add
MilliSecondsSinceUnixEpoch
andSecondsSinceUnixEpoch
types - Bump dependency versions
0.5.0
Breaking changes:
- Rename
push::RulesetIter
topush::RulesetIntoIter
- Change the return type of
push::Ruleset::get_actions
from an iterator to a slice
Improvements:
- Add
push::Ruleset::iter()
for borrowing iteration of rulesets - Add conversions between
AnyPushRule
andAnyPushRuleRef
(AnyPushRule::as_ref
andAnyPushRuleRef::to_owned
) - Add
push::Ruleset::get_match()
for finding the first matching push rule for an event. This is pretty much the same thing asget_actions()
but returns the entire push rule, not just its actions.
0.4.0
Breaking changes:
- Use
ruma_identifiers::MxcUri
instead ofString
foravatar_url
field indirectory::PublicRoomsChunk
- Use
ruma_identifiers::RoomId
instead ofString
forroom_id
field inpush::PushConditionRoomCtx
- Upgrade ruma-identifiers dependency to 0.19.0
0.3.1
Bug fixes:
- Fix
push::PushCondition::applies
for empty value and pattern
0.3.0
Breaking changes:
- Update set of conversion trait implementations for enums
- Replace
Vec
byIndexSet
inpush::Ruleset
- Replace
push::AnyPushRule
with an enum (the original struct still exists as justPushRule
inruma-client-api
) - … (there's a lot more, but this changelog was not kept up to date; PRs to improve it are welcome)
Improvements:
- Add the
thirdparty
module - Add
directory::{Filter, PublicRoomsChunk, RoomNetwork}
(moved fromruma_client_api::r0::directory
) - Add
push::{PusherData, PushFormat}
(moved fromruma_client_api::r0::push
) - Add
authentication::TokenType
(moved fromruma_client_api::r0::account:request_openid_token
) - Add an
IntoIterator
implementation forRuleset
- Add
push::Ruleset::get_actions
- Add
push::PushCondition::applies
- Add
push::{FlattenedJson, PushConditionRoomCtx}
- Add
0.2.0
Breaking changes:
- Make most types defined by the crate
#[non_exhaustive]