Struct VersionHistory

Source
pub struct VersionHistory { /* private fields */ }
Available on crate feature api only.
Expand description

The complete history of this endpoint as far as Ruma knows, together with all variants on versions stable and unstable.

The amount and positioning of path variables are the same over all path variants.

Implementations§

Source§

impl VersionHistory

Source

pub const fn new( unstable_paths: &'static [(Option<&'static str>, &'static str)], stable_paths: &'static [(StablePathSelector, &'static str)], deprecated: Option<MatrixVersion>, removed: Option<MatrixVersion>, ) -> VersionHistory

Constructs an instance of VersionHistory, erroring on compilation if it does not pass invariants.

Specifically, this checks the following invariants:

  • Path arguments are equal (in order, amount, and argument name) in all path strings
  • In stable_paths:
    • Matrix versions are in ascending order
    • No matrix version is referenced twice
  • deprecated’s version comes after the latest version mentioned in stable_paths, except for version 1.0, and only if any stable path is defined
  • removed comes after deprecated, or after the latest referenced stable_paths, like deprecated
§Arguments
  • unstable_paths - List of unstable paths for the endpoint, mapped to optional unstable features.
  • stable_paths - List of stable paths for the endpoint, mapped to selectors.
  • deprecated - The Matrix version that deprecated the endpoint, if any.
  • removed - The Matrix version that removed the endpoint, if any.
Source

pub fn is_supported(&self, considering: &SupportedVersions) -> bool

Whether the homeserver advertises support for a path in this VersionHistory.

Returns true if any version or feature in the given SupportedVersions matches a path in this history, unless the endpoint was removed.

Note that this is likely to return false negatives, since some endpoints don’t specify a stable or unstable feature, and homeservers should not advertise support for a Matrix version unless they support all of its features.

Source

pub fn versioning_decision_for( &self, versions: &BTreeSet<MatrixVersion>, ) -> VersioningDecision

Decide which kind of endpoint to use given the supported versions of a homeserver.

Returns:

  • Removed if the endpoint is removed in all supported versions.
  • Version if the endpoint is stable or deprecated in at least one supported version.
  • Feature in all other cases, to look if a feature path is supported, or use the last unstable path as a fallback.

If resulting VersioningDecision is Stable, it will also detail if any version denoted deprecation or removal.

Source

pub fn added_in(&self) -> Option<MatrixVersion>

Returns the first version this endpoint was added in.

Is None when this endpoint is unstable/unreleased.

Source

pub fn deprecated_in(&self) -> Option<MatrixVersion>

Returns the Matrix version that deprecated this endpoint, if any.

Source

pub fn removed_in(&self) -> Option<MatrixVersion>

Returns the Matrix version that removed this endpoint, if any.

Source

pub fn unstable(&self) -> Option<&'static str>

Picks the last unstable path, if it exists.

Source

pub fn all_paths(&self) -> impl Iterator<Item = &'static str>

Returns all path variants in canon form, for use in server routers.

Source

pub fn unstable_paths( &self, ) -> impl Iterator<Item = (Option<&'static str>, &'static str)>

Returns all unstable path variants in canon form, with optional corresponding feature.

Source

pub fn stable_paths( &self, ) -> impl Iterator<Item = (StablePathSelector, &'static str)>

Returns all version path variants in canon form, with corresponding selector.

Source

pub fn version_path( &self, versions: &BTreeSet<MatrixVersion>, ) -> Option<&'static str>

The path that should be used to query the endpoint, given a set of supported versions.

Picks the latest path that the versions accept.

Returns an endpoint in the following format;

  • /_matrix/client/versions
  • /_matrix/client/hello/{world} ({world} is a path replacement parameter)

Note: This doesn’t handle endpoint removals, check with versioning_decision_for to see if this endpoint is still available.

Source

pub fn feature_path( &self, supported_features: &BTreeSet<FeatureFlag>, ) -> Option<&'static str>

The path that should be used to query the endpoint, given a list of supported features.

Trait Implementations§

Source§

impl Clone for VersionHistory

Source§

fn clone(&self) -> VersionHistory

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VersionHistory

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for VersionHistory

Source§

fn eq(&self, other: &VersionHistory) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for VersionHistory

Source§

impl StructuralPartialEq for VersionHistory

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> JsonCastable<CanonicalJsonValue> for T

Source§

impl<T> JsonCastable<Value> for T