diff --git a/help.html b/help.html index 14799ed..e3cd260 100644 --- a/help.html +++ b/help.html @@ -1,2 +1,2 @@ -Help +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/mpris_server/all.html b/mpris_server/all.html index 08cd772..8855668 100644 --- a/mpris_server/all.html +++ b/mpris_server/all.html @@ -1,2 +1,2 @@ -List of all items in this crate +List of all items in this crate

List of all items

Structs

Enums

Traits

Attribute Macros

Type Aliases

\ No newline at end of file diff --git a/mpris_server/attr.async_trait.html b/mpris_server/attr.async_trait.html index bb60f1a..9cc4619 100644 --- a/mpris_server/attr.async_trait.html +++ b/mpris_server/attr.async_trait.html @@ -1,4 +1,4 @@ -async_trait in mpris_server - Rust +async_trait in mpris_server - Rust

Attribute Macro mpris_server::async_trait

source ·
#[async_trait]
Expand description

Retrofits support for async fn in trait impls and declarations.

Any trait declaration or trait impl decorated with #[async_trait] or #[async_trait(?Send)] is retrofitted with support for async fns:

diff --git a/mpris_server/builder/index.html b/mpris_server/builder/index.html index c251157..aa2d077 100644 --- a/mpris_server/builder/index.html +++ b/mpris_server/builder/index.html @@ -1,4 +1,4 @@ -mpris_server::builder - Rust +mpris_server::builder - Rust

Module mpris_server::builder

source ·
Expand description

This contains the definitions of builder-pattern structs.

The builder methods on the objects must be used instead to construct these builder-pattern structs.

diff --git a/mpris_server/builder/struct.MetadataBuilder.html b/mpris_server/builder/struct.MetadataBuilder.html index 3ee9fa6..d9ecb04 100644 --- a/mpris_server/builder/struct.MetadataBuilder.html +++ b/mpris_server/builder/struct.MetadataBuilder.html @@ -1,52 +1,52 @@ -MetadataBuilder in mpris_server::builder - Rust -
pub struct MetadataBuilder { /* private fields */ }
Expand description

A builder used to create Metadata.

-

Implementations§

source§

impl MetadataBuilder

source

pub fn other(self, key: &str, value: impl Into<Value<'static>>) -> Self

Sets a value for the given key.

-
source

pub fn trackid(self, trackid: impl Into<TrackId>) -> Self

Sets a unique identity for this track within the context of an +MetadataBuilder in mpris_server::builder - Rust

+
pub struct MetadataBuilder { /* private fields */ }
Expand description

A builder used to create Metadata.

+

Implementations§

source§

impl MetadataBuilder

source

pub fn other(self, key: &str, value: impl Into<Value<'static>>) -> Self

Sets a value for the given key.

+
source

pub fn trackid(self, trackid: impl Into<TrackId>) -> Self

Sets a unique identity for this track within the context of an MPRIS object (eg: tracklist).

This contains a D-Bus path that uniquely identifies the track within the scope of the playlist. There may or may not be an actual D-Bus object at that path; this specification says nothing about what interfaces such an object may implement.

-
source

pub fn length(self, length: Time) -> Self

Sets the duration of the track.

-
source

pub fn art_url(self, art_url: impl Into<Uri>) -> Self

Sets the location of an image representing the track or album.

+
source

pub fn length(self, length: Time) -> Self

Sets the duration of the track.

+
source

pub fn art_url(self, art_url: impl Into<Uri>) -> Self

Sets the location of an image representing the track or album.

Clients should not assume this will continue to exist when the media player stops giving out the URL.

-
source

pub fn album(self, album: impl Into<String>) -> Self

Sets the album name.

-
source

pub fn album_artist( +

source

pub fn album(self, album: impl Into<String>) -> Self

Sets the album name.

+
source

pub fn album_artist( self, album_artist: impl IntoIterator<Item = impl Into<String>> ) -> Self

Sets the album artist(s).

-
source

pub fn artist(self, artist: impl IntoIterator<Item = impl Into<String>>) -> Self

Sets the track artist(s).

-
source

pub fn lyrics(self, lyrics: impl Into<String>) -> Self

Sets the track lyrics.

-
source

pub fn audio_bpm(self, audio_bpm: i32) -> Self

Sets the speed of the music, in beats per minute.

-
source

pub fn auto_rating(self, auto_rating: f64) -> Self

Sets an automatically-generated rating, based on things such +

source

pub fn artist(self, artist: impl IntoIterator<Item = impl Into<String>>) -> Self

Sets the track artist(s).

+
source

pub fn lyrics(self, lyrics: impl Into<String>) -> Self

Sets the track lyrics.

+
source

pub fn audio_bpm(self, audio_bpm: i32) -> Self

Sets the speed of the music, in beats per minute.

+
source

pub fn auto_rating(self, auto_rating: f64) -> Self

Sets an automatically-generated rating, based on things such as how often it has been played. This should be in the range 0.0 to 1.0.

-
source

pub fn comment( +

source

pub fn comment( self, comment: impl IntoIterator<Item = impl Into<String>> ) -> Self

Sets a (list of) freeform comment(s).

-
source

pub fn composer( +

source

pub fn composer( self, composer: impl IntoIterator<Item = impl Into<String>> ) -> Self

Sets the composer(s) of the track.

-
source

pub fn content_created(self, content_created: impl Into<DateTime>) -> Self

Sets when the track was created. Usually only the year component +

source

pub fn content_created(self, content_created: impl Into<DateTime>) -> Self

Sets when the track was created. Usually only the year component will be useful.

-
source

pub fn disc_number(self, disc_number: i32) -> Self

Sets the disc number on the album that this track is from.

-
source

pub fn first_used(self, first_used: impl Into<DateTime>) -> Self

Sets when the track was first played.

-
source

pub fn genre(self, genre: impl IntoIterator<Item = impl Into<String>>) -> Self

Sets the genre(s) of the track.

-
source

pub fn last_used(self, last_used: impl Into<DateTime>) -> Self

Sets when the track was last played.

-
source

pub fn lyricist( +

source

pub fn disc_number(self, disc_number: i32) -> Self

Sets the disc number on the album that this track is from.

+
source

pub fn first_used(self, first_used: impl Into<DateTime>) -> Self

Sets when the track was first played.

+
source

pub fn genre(self, genre: impl IntoIterator<Item = impl Into<String>>) -> Self

Sets the genre(s) of the track.

+
source

pub fn last_used(self, last_used: impl Into<DateTime>) -> Self

Sets when the track was last played.

+
source

pub fn lyricist( self, lyricist: impl IntoIterator<Item = impl Into<String>> ) -> Self

Sets the lyricist(s) of the track.

-
source

pub fn title(self, title: impl Into<String>) -> Self

Sets the track title.

-
source

pub fn track_number(self, track_number: i32) -> Self

Sets the track number on the album disc.

-
source

pub fn url(self, url: impl Into<Uri>) -> Self

Sets the location of the media file.

-
source

pub fn use_count(self, use_count: i32) -> Self

Sets the number of times the track has been played.

-
source

pub fn user_rating(self, user_rating: f64) -> Self

Sets a user-specified rating. This should be in the range 0.0 to 1.0.

-
source

pub fn build(self) -> Metadata

Creates Metadata from the builder.

-

Trait Implementations§

source§

impl Clone for MetadataBuilder

source§

fn clone(&self) -> MetadataBuilder

Returns a copy 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 MetadataBuilder

source§

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

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

impl Default for MetadataBuilder

source§

fn default() -> MetadataBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for MetadataBuilder

§

impl Send for MetadataBuilder

§

impl Sync for MetadataBuilder

§

impl Unpin for MetadataBuilder

§

impl UnwindSafe for MetadataBuilder

Blanket Implementations§

source§

impl<T> Any for T
where +

source

pub fn title(self, title: impl Into<String>) -> Self

Sets the track title.

+
source

pub fn track_number(self, track_number: i32) -> Self

Sets the track number on the album disc.

+
source

pub fn url(self, url: impl Into<Uri>) -> Self

Sets the location of the media file.

+
source

pub fn use_count(self, use_count: i32) -> Self

Sets the number of times the track has been played.

+
source

pub fn user_rating(self, user_rating: f64) -> Self

Sets a user-specified rating. This should be in the range 0.0 to 1.0.

+
source

pub fn build(self) -> Metadata

Creates Metadata from the builder.

+

Trait Implementations§

source§

impl Clone for MetadataBuilder

source§

fn clone(&self) -> MetadataBuilder

Returns a copy 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 MetadataBuilder

source§

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

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

impl Default for MetadataBuilder

source§

fn default() -> MetadataBuilder

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for MetadataBuilder

§

impl Send for MetadataBuilder

§

impl Sync for MetadataBuilder

§

impl Unpin for MetadataBuilder

§

impl UnwindSafe for MetadataBuilder

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/mpris_server/builder/struct.PlayerBuilder.html b/mpris_server/builder/struct.PlayerBuilder.html index e15984f..9dafe55 100644 --- a/mpris_server/builder/struct.PlayerBuilder.html +++ b/mpris_server/builder/struct.PlayerBuilder.html @@ -1,4 +1,4 @@ -PlayerBuilder in mpris_server::builder - Rust +PlayerBuilder in mpris_server::builder - Rust
pub struct PlayerBuilder { /* private fields */ }
Expand description

A builder used to create Player.

Implementations§

source§

impl PlayerBuilder

source

pub fn can_quit(self, can_quit: bool) -> Self

source

pub fn fullscreen(self, fullscreen: bool) -> Self

source

pub fn can_set_fullscreen(self, can_set_fullscreen: bool) -> Self

source

pub fn can_raise(self, can_raise: bool) -> Self

source

pub fn has_track_list(self, has_track_list: bool) -> Self

source

pub fn identity(self, identity: impl Into<String>) -> Self

source

pub fn desktop_entry(self, desktop_entry: impl Into<String>) -> Self

source

pub fn supported_uri_schemes( self, diff --git a/mpris_server/enum.LoopStatus.html b/mpris_server/enum.LoopStatus.html index 68ecc22..2a3100c 100644 --- a/mpris_server/enum.LoopStatus.html +++ b/mpris_server/enum.LoopStatus.html @@ -1,4 +1,4 @@ -LoopStatus in mpris_server - Rust +LoopStatus in mpris_server - Rust
pub enum LoopStatus {
     None,
     Track,
@@ -10,8 +10,8 @@
 
§

Playlist

The playback loops through a list of tracks.

Implementations§

source§

impl LoopStatus

source

pub fn as_str(&self) -> &'static str

Returns the string representation of this loop status.

Trait Implementations§

source§

impl Clone for LoopStatus

source§

fn clone(&self) -> LoopStatus

Returns a copy 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 LoopStatus

source§

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

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

impl Display for LoopStatus

source§

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

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

impl<'a> From<LoopStatus> for Value<'a>

source§

fn from(status: LoopStatus) -> Self

Converts to this type from the input type.
source§

impl PartialEq for LoopStatus

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl<'a> TryFrom<Value<'a>> for LoopStatus

§

type Error = Error

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

fn try_from(value: Value<'a>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Type for LoopStatus

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for LoopStatus

source§

impl Eq for LoopStatus

source§

impl StructuralEq for LoopStatus

source§

impl StructuralPartialEq for LoopStatus

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +by ==.

1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<'a> TryFrom<Value<'a>> for LoopStatus

§

type Error = Error

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

fn try_from(value: Value<'a>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Type for LoopStatus

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for LoopStatus

source§

impl Eq for LoopStatus

source§

impl StructuralPartialEq for LoopStatus

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
§

impl<T> DynamicType for T

Implementations§

source§

impl PlaybackStatus

source

pub fn as_str(&self) -> &'static str

Returns the string representation of this playback status.

-

Trait Implementations§

source§

impl Clone for PlaybackStatus

source§

fn clone(&self) -> PlaybackStatus

Returns a copy 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 PlaybackStatus

source§

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

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

impl Display for PlaybackStatus

source§

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

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

impl<'a> From<PlaybackStatus> for Value<'a>

source§

fn from(status: PlaybackStatus) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PlaybackStatus

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Type for PlaybackStatus

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for PlaybackStatus

source§

impl Eq for PlaybackStatus

source§

impl StructuralEq for PlaybackStatus

source§

impl StructuralPartialEq for PlaybackStatus

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Clone for PlaybackStatus

source§

fn clone(&self) -> PlaybackStatus

Returns a copy 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 PlaybackStatus

source§

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

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

impl Display for PlaybackStatus

source§

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

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

impl<'a> From<PlaybackStatus> for Value<'a>

source§

fn from(status: PlaybackStatus) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PlaybackStatus

source§

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

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Type for PlaybackStatus

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for PlaybackStatus

source§

impl Eq for PlaybackStatus

source§

impl StructuralPartialEq for PlaybackStatus

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
§

impl<T> DynamicType for T
where diff --git a/mpris_server/enum.PlaylistOrdering.html b/mpris_server/enum.PlaylistOrdering.html index 54876a1..b229ec2 100644 --- a/mpris_server/enum.PlaylistOrdering.html +++ b/mpris_server/enum.PlaylistOrdering.html @@ -1,4 +1,4 @@ -PlaylistOrdering in mpris_server - Rust +PlaylistOrdering in mpris_server - Rust
pub enum PlaylistOrdering {
     Alphabetical,
     CreationDate,
@@ -16,10 +16,10 @@
 
§

LastPlayDate

Ordering by date of last playback, oldest first.

§

UserDefined

A user-defined ordering.

Implementations§

source§

impl PlaylistOrdering

source

pub fn as_str(&self) -> &'static str

Returns the string representation of this playlist ordering.

-

Trait Implementations§

source§

impl Clone for PlaylistOrdering

source§

fn clone(&self) -> PlaylistOrdering

Returns a copy 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 PlaylistOrdering

source§

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

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

impl<'de> Deserialize<'de> for PlaylistOrdering

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for PlaylistOrdering

source§

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

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

impl<'a> From<PlaylistOrdering> for Value<'a>

source§

fn from(status: PlaylistOrdering) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PlaylistOrdering

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Type for PlaylistOrdering

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for PlaylistOrdering

source§

impl Eq for PlaylistOrdering

source§

impl StructuralEq for PlaylistOrdering

source§

impl StructuralPartialEq for PlaylistOrdering

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Clone for PlaylistOrdering

source§

fn clone(&self) -> PlaylistOrdering

Returns a copy 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 PlaylistOrdering

source§

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

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

impl<'de> Deserialize<'de> for PlaylistOrdering

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for PlaylistOrdering

source§

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

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

impl<'a> From<PlaylistOrdering> for Value<'a>

source§

fn from(status: PlaylistOrdering) -> Self

Converts to this type from the input type.
source§

impl PartialEq for PlaylistOrdering

source§

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

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Type for PlaylistOrdering

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for PlaylistOrdering

source§

impl Eq for PlaylistOrdering

source§

impl StructuralPartialEq for PlaylistOrdering

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
§

impl<'de, T> DynamicDeserialize<'de> for T

Variants§

§

PlaylistCount(u32)

§

Orderings(Vec<PlaylistOrdering>)

§

ActivePlaylist(Option<Playlist>)

Trait Implementations§

source§

impl Clone for PlaylistsProperty

source§

fn clone(&self) -> PlaylistsProperty

Returns a copy 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 PlaylistsProperty

source§

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

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

impl PartialEq for PlaylistsProperty

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for PlaylistsProperty

source§

impl StructuralEq for PlaylistsProperty

source§

impl StructuralPartialEq for PlaylistsProperty

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +by ==.

1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for PlaylistsProperty

source§

impl StructuralPartialEq for PlaylistsProperty

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/mpris_server/enum.PlaylistsSignal.html b/mpris_server/enum.PlaylistsSignal.html index bea80fa..4350d78 100644 --- a/mpris_server/enum.PlaylistsSignal.html +++ b/mpris_server/enum.PlaylistsSignal.html @@ -1,4 +1,4 @@ -PlaylistsSignal in mpris_server - Rust +PlaylistsSignal in mpris_server - Rust
pub enum PlaylistsSignal {
     PlaylistChanged {
         playlist: Playlist,
diff --git a/mpris_server/enum.Property.html b/mpris_server/enum.Property.html
index 7882514..427bfb0 100644
--- a/mpris_server/enum.Property.html
+++ b/mpris_server/enum.Property.html
@@ -1,4 +1,4 @@
-Property in mpris_server - Rust
+Property in mpris_server - Rust
     
pub enum Property {
 
Show 22 variants CanQuit(bool), Fullscreen(bool), @@ -25,7 +25,7 @@
}
Expand description

Used for emitting PropertiesChanged signals on Server::properties_changed and LocalServer::properties_changed.

Variants§

§

CanQuit(bool)

§

Fullscreen(bool)

§

CanSetFullscreen(bool)

§

CanRaise(bool)

§

HasTrackList(bool)

§

Identity(String)

§

DesktopEntry(String)

§

SupportedUriSchemes(Vec<String>)

§

SupportedMimeTypes(Vec<String>)

§

PlaybackStatus(PlaybackStatus)

§

LoopStatus(LoopStatus)

§

Rate(PlaybackRate)

§

Shuffle(bool)

§

Metadata(Metadata)

§

Volume(Volume)

§

MinimumRate(PlaybackRate)

§

MaximumRate(PlaybackRate)

§

CanGoNext(bool)

§

CanGoPrevious(bool)

§

CanPlay(bool)

§

CanPause(bool)

§

CanSeek(bool)

Trait Implementations§

source§

impl Clone for Property

source§

fn clone(&self) -> Property

Returns a copy 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 Property

source§

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

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

impl PartialEq for Property

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for Property

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 diff --git a/mpris_server/enum.Signal.html b/mpris_server/enum.Signal.html index 9936b47..139c87d 100644 --- a/mpris_server/enum.Signal.html +++ b/mpris_server/enum.Signal.html @@ -1,4 +1,4 @@ -Signal in mpris_server - Rust +Signal in mpris_server - Rust

Variants§

§

Tracks

§

CanEditTracks(bool)

Trait Implementations§

source§

impl Clone for TrackListProperty

source§

fn clone(&self) -> TrackListProperty

Returns a copy 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 TrackListProperty

source§

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

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

impl PartialEq for TrackListProperty

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for TrackListProperty

source§

impl StructuralEq for TrackListProperty

source§

impl StructuralPartialEq for TrackListProperty

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +by ==.

1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TrackListProperty

source§

impl StructuralPartialEq for TrackListProperty

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/mpris_server/enum.TrackListSignal.html b/mpris_server/enum.TrackListSignal.html index 3b02e19..12756b5 100644 --- a/mpris_server/enum.TrackListSignal.html +++ b/mpris_server/enum.TrackListSignal.html @@ -1,4 +1,4 @@ -TrackListSignal in mpris_server - Rust +TrackListSignal in mpris_server - Rust
pub enum TrackListSignal {
     TrackListReplaced {
         tracks: Vec<TrackId>,
diff --git a/mpris_server/index.html b/mpris_server/index.html
index 316a132..39a659b 100644
--- a/mpris_server/index.html
+++ b/mpris_server/index.html
@@ -1,4 +1,4 @@
-mpris_server - Rust

Trait Implementations§

source§

impl<T> Debug for LocalServer<T>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for LocalServer<T>

§

impl<T> !Send for LocalServer<T>

§

impl<T> !Sync for LocalServer<T>

§

impl<T> Unpin for LocalServer<T>

§

impl<T> !UnwindSafe for LocalServer<T>

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/mpris_server/struct.LocalServerRunTask.html b/mpris_server/struct.LocalServerRunTask.html index ba9e43b..97d8b2b 100644 --- a/mpris_server/struct.LocalServerRunTask.html +++ b/mpris_server/struct.LocalServerRunTask.html @@ -1,9 +1,9 @@ -LocalServerRunTask in mpris_server - Rust -
pub struct LocalServerRunTask { /* private fields */ }
Expand description

A task that runs LocalServer’s event handler until the server +LocalServerRunTask in mpris_server - Rust

+
pub struct LocalServerRunTask { /* private fields */ }
Expand description

A task that runs LocalServer’s event handler until the server and this task is dropped.

This must be awaited as soon as possible after creating the server.

See LocalServer::run for more information.

-

Trait Implementations§

source§

impl Debug for LocalServerRunTask

source§

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

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

impl Future for LocalServerRunTask

§

type Output = ()

The type of value produced on completion.
source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempt to resolve the future to a final value, registering +

Trait Implementations§

source§

impl Debug for LocalServerRunTask

source§

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

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

impl Future for LocalServerRunTask

§

type Output = ()

The type of value produced on completion.
source§

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Attempt to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

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 @@ -14,14 +14,10 @@ Self: Sized, F: Future<Output = Self::Output>,

Returns the result of self or other future, preferring self if both are ready. Read more
§

fn race<F>(self, other: F) -> Race<Self, F>
where Self: Sized, - F: Future<Output = Self::Output>,

Returns the result of self or other future, with no preference if both are ready. Read more
§

fn catch_unwind(self) -> CatchUnwind<Self>
where - Self: Sized + UnwindSafe,

Catches panics while polling the future. Read more
§

fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a>>
where - Self: Sized + Send + 'a,

Boxes the future and changes its type to dyn Future + Send + 'a. Read more
§

fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>>
where - Self: Sized + 'a,

Boxes the future and changes its type to dyn Future + 'a. Read more
§

impl<F> FutureExt for F
where - F: Future + ?Sized,

§

fn poll(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output>
where - Self: Unpin,

A convenience for calling Future::poll() on !Unpin types.
§

fn or<F>(self, other: F) -> Or<Self, F>
where - Self: Sized, - F: Future<Output = Self::Output>,

Returns the result of self or other future, preferring self if both are ready. Read more
§

impl<T> FutureExt for T
where + F: Future<Output = Self::Output>,

Returns the result of self or other future, with no preference if both are ready. Read more
§

fn catch_unwind(self) -> CatchUnwind<Self>
where + Self: Sized + UnwindSafe,

Catches panics while polling the future. Read more
§

fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a>>
where + Self: Sized + Send + 'a,

Boxes the future and changes its type to dyn Future + Send + 'a. Read more
§

fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>>
where + Self: Sized + 'a,

Boxes the future and changes its type to dyn Future + 'a. Read more
§

impl<T> FutureExt for T
where T: Future + ?Sized,

§

fn map<U, F>(self, f: F) -> Map<Self, F>
where F: FnOnce(Self::Output) -> U, Self: Sized,

Map this future’s output to a different type, returning a new future of @@ -50,12 +46,12 @@ completed. This method can be used to turn any Future into a FusedFuture. Read more
§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where F: FnOnce(&Self::Output), - Self: Sized,

Do something with the output of a future before passing it on. Read more
§

fn catch_unwind(self) -> CatchUnwind<Self>
where + Self: Sized,

Do something with the output of a future before passing it on. Read more
§

fn catch_unwind(self) -> CatchUnwind<Self>
where Self: Sized + UnwindSafe,

Catches unwinding panics while polling the future. Read more
§

fn shared(self) -> Shared<Self>
where Self: Sized, Self::Output: Clone,

Create a cloneable handle to this future where all handles will resolve -to the same result. Read more
§

fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a>>
where - Self: Sized + Send + 'a,

Wrap the future in a Box, pinning it. Read more
§

fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>>
where +to the same result. Read more

§

fn boxed<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'a>>
where + Self: Sized + Send + 'a,

Wrap the future in a Box, pinning it. Read more
§

fn boxed_local<'a>(self) -> Pin<Box<dyn Future<Output = Self::Output> + 'a>>
where Self: Sized + 'a,

Wrap the future in a Box, pinning it. Read more
§

fn unit_error(self) -> UnitError<Self>
where Self: Sized,

§

fn never_error(self) -> NeverError<Self>
where diff --git a/mpris_server/struct.Metadata.html b/mpris_server/struct.Metadata.html index acf9622..2f9a71f 100644 --- a/mpris_server/struct.Metadata.html +++ b/mpris_server/struct.Metadata.html @@ -1,116 +1,117 @@ -Metadata in mpris_server - Rust +Metadata in mpris_server - Rust

Struct mpris_server::Metadata

source ·
pub struct Metadata(/* private fields */);
Expand description

A mapping from metadata attribute names to values.

The mpris:trackid attribute must always be present.

If the length of the track is known, it should be provided in the metadata property with the mpris:length key.

If there is an image associated with the track, a URL for it may be provided using the mpris:artUrl key.

-

Implementations§

source§

impl Metadata

source

pub fn new() -> Self

Creates an empty Metadata.

-
source

pub fn builder() -> MetadataBuilder

Creates a new builder-pattern struct instance to construct Metadata.

-
source

pub fn get<'v, V>(&'v self, key: &str) -> Option<Result<&'v V>>
where - &'v V: TryFrom<&'v Value<'v>>,

Returns the value corresponding to the key and convert it to V.

-
source

pub fn get_value(&self, key: &str) -> Option<&Value<'_>>

Returns a reference to the value corresponding to the key.

-
source

pub fn set( +

Implementations§

source§

impl Metadata

source

pub fn new() -> Self

Creates an empty Metadata.

+
source

pub fn builder() -> MetadataBuilder

Creates a new builder-pattern struct instance to construct Metadata.

+
source

pub fn get<'v, V>(&'v self, key: &str) -> Option<Result<&'v V>>
where + &'v V: TryFrom<&'v Value<'v>>, + <&'v V as TryFrom<&'v Value<'v>>>::Error: Into<Error>,

Returns the value corresponding to the key and convert it to V.

+
source

pub fn get_value(&self, key: &str) -> Option<&Value<'_>>

Returns a reference to the value corresponding to the key.

+
source

pub fn set( &mut self, key: &str, value: Option<impl Into<Value<'static>>> ) -> Option<Value<'static>>

Sets the value for the given key and returns the previous value, if any.

If the given value is None, the key is removed from the metadata, if any.

-
source

pub fn set_value( +

source

pub fn set_value( &mut self, key: &str, value: Option<Value<'static>> ) -> Option<Value<'static>>

Sets the value for the given key and returns the previous value, if any.

This behaves like Metadata::set, but this takes a [enum@Value] instead of a generic type.

-
source

pub fn trackid(&self) -> Option<TrackId>

A unique identity for this track within the context of an +

source

pub fn trackid(&self) -> Option<TrackId>

A unique identity for this track within the context of an MPRIS object (eg: tracklist).

This contains a D-Bus path that uniquely identifies the track within the scope of the playlist. There may or may not be an actual D-Bus object at that path; this specification says nothing about what interfaces such an object may implement.

-
source

pub fn set_trackid(&mut self, trackid: Option<impl Into<TrackId>>)

Sets a unique identity for this track within the context of an +

source

pub fn set_trackid(&mut self, trackid: Option<impl Into<TrackId>>)

Sets a unique identity for this track within the context of an MPRIS object (eg: tracklist).

This contains a D-Bus path that uniquely identifies the track within the scope of the playlist. There may or may not be an actual D-Bus object at that path; this specification says nothing about what interfaces such an object may implement.

-
source

pub fn length(&self) -> Option<Time>

The duration of the track.

-
source

pub fn set_length(&mut self, length: Option<Time>)

Sets the duration of the track.

-
source

pub fn art_url(&self) -> Option<Uri>

The location of an image representing the track or album.

+
source

pub fn length(&self) -> Option<Time>

The duration of the track.

+
source

pub fn set_length(&mut self, length: Option<Time>)

Sets the duration of the track.

+
source

pub fn art_url(&self) -> Option<Uri>

The location of an image representing the track or album.

Clients should not assume this will continue to exist when the media player stops giving out the URL.

-
source

pub fn set_art_url(&mut self, art_url: Option<impl Into<Uri>>)

Sets the location of an image representing the track or album.

+
source

pub fn set_art_url(&mut self, art_url: Option<impl Into<Uri>>)

Sets the location of an image representing the track or album.

Clients should not assume this will continue to exist when the media player stops giving out the URL.

-
source

pub fn album(&self) -> Option<&str>

The album name.

-
source

pub fn set_album(&mut self, album: Option<impl Into<String>>)

Sets the album name.

-
source

pub fn album_artist(&self) -> Option<Vec<String>>

The album artist(s).

-
source

pub fn set_album_artist( +

source

pub fn album(&self) -> Option<&str>

The album name.

+
source

pub fn set_album(&mut self, album: Option<impl Into<String>>)

Sets the album name.

+
source

pub fn album_artist(&self) -> Option<Vec<String>>

The album artist(s).

+
source

pub fn set_album_artist( &mut self, album_artist: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets the album artist(s).

-
source

pub fn artist(&self) -> Option<Vec<String>>

The track artist(s).

-
source

pub fn set_artist( +

source

pub fn artist(&self) -> Option<Vec<String>>

The track artist(s).

+
source

pub fn set_artist( &mut self, artist: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets the track artist(s).

-
source

pub fn lyrics(&self) -> Option<&str>

The track lyrics.

-
source

pub fn set_lyrics(&mut self, lyrics: Option<impl Into<String>>)

Sets the track lyrics.

-
source

pub fn audio_bpm(&self) -> Option<i32>

The speed of the music, in beats per minute.

-
source

pub fn set_audio_bpm(&mut self, audio_bpm: Option<i32>)

Sets the speed of the music, in beats per minute.

-
source

pub fn auto_rating(&self) -> Option<f64>

An automatically-generated rating, based on things such +

source

pub fn lyrics(&self) -> Option<&str>

The track lyrics.

+
source

pub fn set_lyrics(&mut self, lyrics: Option<impl Into<String>>)

Sets the track lyrics.

+
source

pub fn audio_bpm(&self) -> Option<i32>

The speed of the music, in beats per minute.

+
source

pub fn set_audio_bpm(&mut self, audio_bpm: Option<i32>)

Sets the speed of the music, in beats per minute.

+
source

pub fn auto_rating(&self) -> Option<f64>

An automatically-generated rating, based on things such as how often it has been played. This should be in the range 0.0 to 1.0.

-
source

pub fn set_auto_rating(&mut self, auto_rating: Option<f64>)

Sets an automatically-generated rating, based on things such +

source

pub fn set_auto_rating(&mut self, auto_rating: Option<f64>)

Sets an automatically-generated rating, based on things such as how often it has been played. This should be in the range 0.0 to 1.0.

-
source

pub fn comment(&self) -> Option<Vec<String>>

A (list of) freeform comment(s).

-
source

pub fn set_comment( +

source

pub fn comment(&self) -> Option<Vec<String>>

A (list of) freeform comment(s).

+
source

pub fn set_comment( &mut self, comment: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets a (list of) freeform comment(s).

-
source

pub fn composer(&self) -> Option<Vec<String>>

The composer(s) of the track.

-
source

pub fn set_composer( +

source

pub fn composer(&self) -> Option<Vec<String>>

The composer(s) of the track.

+
source

pub fn set_composer( &mut self, composer: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets the composer(s) of the track.

-
source

pub fn content_created(&self) -> Option<DateTime>

When the track was created. Usually only the year component +

source

pub fn content_created(&self) -> Option<DateTime>

When the track was created. Usually only the year component will be useful.

-
source

pub fn set_content_created( +

source

pub fn set_content_created( &mut self, content_created: Option<impl Into<DateTime>> )

Sets when the track was created. Usually only the year component will be useful.

-
source

pub fn disc_number(&self) -> Option<i32>

The disc number on the album that this track is from.

-
source

pub fn set_disc_number(&mut self, disc_number: Option<i32>)

Sets the disc number on the album that this track is from.

-
source

pub fn first_used(&self) -> Option<DateTime>

When the track was first played.

-
source

pub fn set_first_used(&mut self, first_used: Option<impl Into<DateTime>>)

Sets when the track was first played.

-
source

pub fn genre(&self) -> Option<Vec<String>>

The genre(s) of the track.

-
source

pub fn set_genre( +

source

pub fn disc_number(&self) -> Option<i32>

The disc number on the album that this track is from.

+
source

pub fn set_disc_number(&mut self, disc_number: Option<i32>)

Sets the disc number on the album that this track is from.

+
source

pub fn first_used(&self) -> Option<DateTime>

When the track was first played.

+
source

pub fn set_first_used(&mut self, first_used: Option<impl Into<DateTime>>)

Sets when the track was first played.

+
source

pub fn genre(&self) -> Option<Vec<String>>

The genre(s) of the track.

+
source

pub fn set_genre( &mut self, genre: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets the genre(s) of the track.

-
source

pub fn last_used(&self) -> Option<DateTime>

When the track was last played.

-
source

pub fn set_last_used(&mut self, last_used: Option<impl Into<DateTime>>)

Sets when the track was last played.

-
source

pub fn lyricist(&self) -> Option<Vec<String>>

The lyricist(s) of the track.

-
source

pub fn set_lyricist( +

source

pub fn last_used(&self) -> Option<DateTime>

When the track was last played.

+
source

pub fn set_last_used(&mut self, last_used: Option<impl Into<DateTime>>)

Sets when the track was last played.

+
source

pub fn lyricist(&self) -> Option<Vec<String>>

The lyricist(s) of the track.

+
source

pub fn set_lyricist( &mut self, lyricist: Option<impl IntoIterator<Item = impl Into<String>>> )

Sets the lyricist(s) of the track.

-
source

pub fn title(&self) -> Option<&str>

The track title.

-
source

pub fn set_title(&mut self, title: Option<impl Into<String>>)

Sets the track title.

-
source

pub fn track_number(&self) -> Option<i32>

The track number on the album disc.

-
source

pub fn set_track_number(&mut self, track_number: Option<i32>)

Sets the track number on the album disc.

-
source

pub fn url(&self) -> Option<Uri>

The location of the media file.

-
source

pub fn set_url(&mut self, url: Option<impl Into<Uri>>)

Sets the location of the media file.

-
source

pub fn use_count(&self) -> Option<i32>

The number of times the track has been played.

-
source

pub fn set_use_count(&mut self, use_count: Option<i32>)

Sets the number of times the track has been played.

-
source

pub fn user_rating(&self) -> Option<f64>

A user-specified rating. This should be in the range 0.0 to 1.0.

-
source

pub fn set_user_rating(&mut self, user_rating: Option<f64>)

Sets a user-specified rating. This should be in the range 0.0 to 1.0.

-

Trait Implementations§

source§

impl Clone for Metadata

source§

fn clone(&self) -> Metadata

Returns a copy 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 Metadata

source§

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

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

impl Default for Metadata

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'a> From<Metadata> for Value<'a>

source§

fn from(metainfo: Metadata) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Metadata

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +
source

pub fn title(&self) -> Option<&str>

The track title.

+
source

pub fn set_title(&mut self, title: Option<impl Into<String>>)

Sets the track title.

+
source

pub fn track_number(&self) -> Option<i32>

The track number on the album disc.

+
source

pub fn set_track_number(&mut self, track_number: Option<i32>)

Sets the track number on the album disc.

+
source

pub fn url(&self) -> Option<Uri>

The location of the media file.

+
source

pub fn set_url(&mut self, url: Option<impl Into<Uri>>)

Sets the location of the media file.

+
source

pub fn use_count(&self) -> Option<i32>

The number of times the track has been played.

+
source

pub fn set_use_count(&mut self, use_count: Option<i32>)

Sets the number of times the track has been played.

+
source

pub fn user_rating(&self) -> Option<f64>

A user-specified rating. This should be in the range 0.0 to 1.0.

+
source

pub fn set_user_rating(&mut self, user_rating: Option<f64>)

Sets a user-specified rating. This should be in the range 0.0 to 1.0.

+

Trait Implementations§

source§

impl Clone for Metadata

source§

fn clone(&self) -> Self

Returns a copy 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 Metadata

source§

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

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

impl Default for Metadata

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'a> From<Metadata> for Value<'a>

source§

fn from(metainfo: Metadata) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Metadata

source§

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

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Metadata

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Type for Metadata

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl StructuralPartialEq for Metadata

Auto Trait Implementations§

§

impl RefUnwindSafe for Metadata

§

impl Send for Metadata

§

impl Sync for Metadata

§

impl Unpin for Metadata

§

impl UnwindSafe for Metadata

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 diff --git a/mpris_server/struct.Player.html b/mpris_server/struct.Player.html index a144e6e..113ceb0 100644 --- a/mpris_server/struct.Player.html +++ b/mpris_server/struct.Player.html @@ -1,4 +1,4 @@ -Player in mpris_server - Rust +Player in mpris_server - Rust

Struct mpris_server::Player

source ·
pub struct Player { /* private fields */ }
Expand description

Ready-to-use mutable service-side object that internally implements LocalRootInterface and LocalPlayerInterface.

This has its own internal state, automatically emits properties changed diff --git a/mpris_server/struct.Playlist.html b/mpris_server/struct.Playlist.html index 7182174..78d06d8 100644 --- a/mpris_server/struct.Playlist.html +++ b/mpris_server/struct.Playlist.html @@ -1,4 +1,4 @@ -Playlist in mpris_server - Rust

+Playlist in mpris_server - Rust

Struct mpris_server::Playlist

source ·
pub struct Playlist {
     pub id: PlaylistId,
     pub name: String,
@@ -9,9 +9,9 @@
 
§name: String

The name of the playlist, typically given by the user.

§icon: Uri

The URI of an (optional) icon.

Trait Implementations§

source§

impl Clone for Playlist

source§

fn clone(&self) -> Playlist

Returns a copy 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 Playlist

source§

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

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

impl<'a> From<Playlist> for Value<'a>

source§

fn from(p: Playlist) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Playlist

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Playlist

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Type for Playlist

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Eq for Playlist

source§

impl StructuralEq for Playlist

source§

impl StructuralPartialEq for Playlist

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Type for Playlist

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Eq for Playlist

source§

impl StructuralPartialEq for Playlist

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
§

impl<T> DynamicType for T
where diff --git a/mpris_server/struct.Server.html b/mpris_server/struct.Server.html index 04f5ae1..3d302d9 100644 --- a/mpris_server/struct.Server.html +++ b/mpris_server/struct.Server.html @@ -1,4 +1,4 @@ -Server in mpris_server - Rust +Server in mpris_server - Rust

Struct mpris_server::Server

source ·
pub struct Server<T> { /* private fields */ }
Expand description

Thin wrapper around [zbus::Connection] that calls to T’s implementation of RootInterface, PlayerInterface, TrackListInterface, and PlaylistsInterface to implement org.mpris.MediaPlayer2 and its diff --git a/mpris_server/struct.Time.html b/mpris_server/struct.Time.html index 968abbe..fde26de 100644 --- a/mpris_server/struct.Time.html +++ b/mpris_server/struct.Time.html @@ -1,4 +1,4 @@ -Time in mpris_server - Rust

+Time in mpris_server - Rust

Struct mpris_server::Time

source ·
pub struct Time(/* private fields */);
Expand description

A time with microsecond precision which can be negative.

Implementations§

source§

impl Time

source

pub const ZERO: Self = _

A time of zero.

§Examples
@@ -127,18 +127,18 @@
§Examples1) ); assert_eq!(Time::MIN.saturating_sub(Time::from_micros(1)), Time::MIN);
-

Trait Implementations§

source§

impl Add for Time

§

type Output = Time

The resulting type after applying the + operator.
source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
source§

impl AddAssign for Time

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl Clone for Time

source§

fn clone(&self) -> Time

Returns a copy 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 Time

source§

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

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

impl Default for Time

source§

fn default() -> Time

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Time

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where +

Trait Implementations§

source§

impl Add for Time

§

type Output = Time

The resulting type after applying the + operator.
source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
source§

impl AddAssign for Time

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl Clone for Time

source§

fn clone(&self) -> Time

Returns a copy 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 Time

source§

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

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

impl Default for Time

source§

fn default() -> Time

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Time

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<'a> From<Time> for Value<'a>

source§

fn from(time: Time) -> Self

Converts to this type from the input type.
source§

impl Hash for Time

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Time

source§

fn cmp(&self, other: &Time) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Time

source§

fn cmp(&self, other: &Time) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Time

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Time

source§

fn partial_cmp(&self, other: &Time) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >= +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Time

source§

fn partial_cmp(&self, other: &Time) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for Time

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Sub for Time

§

type Output = Time

The resulting type after applying the - operator.
source§

fn sub(self, other: Self) -> Self

Performs the - operation. Read more
source§

impl SubAssign for Time

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl TryFrom<Value<'_>> for Time

§

type Error = Error

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

fn try_from(value: Value<'_>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Type for Time

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for Time

source§

impl Eq for Time

source§

impl StructuralEq for Time

source§

impl StructuralPartialEq for Time

Auto Trait Implementations§

§

impl RefUnwindSafe for Time

§

impl Send for Time

§

impl Sync for Time

§

impl Unpin for Time

§

impl UnwindSafe for Time

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more

source§

impl Sub for Time

§

type Output = Time

The resulting type after applying the - operator.
source§

fn sub(self, other: Self) -> Self

Performs the - operation. Read more
source§

impl SubAssign for Time

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl TryFrom<Value<'_>> for Time

§

type Error = Error

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

fn try_from(value: Value<'_>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Type for Time

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Copy for Time

source§

impl Eq for Time

source§

impl StructuralPartialEq for Time

Auto Trait Implementations§

§

impl RefUnwindSafe for Time

§

impl Send for Time

§

impl Sync for Time

§

impl Unpin for Time

§

impl UnwindSafe for Time

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
§

impl<'de, T> DynamicDeserialize<'de> for T
where diff --git a/mpris_server/struct.TrackId.html b/mpris_server/struct.TrackId.html index 0fcc4ec..3510477 100644 --- a/mpris_server/struct.TrackId.html +++ b/mpris_server/struct.TrackId.html @@ -1,4 +1,4 @@ -TrackId in mpris_server - Rust +TrackId in mpris_server - Rust

Struct mpris_server::TrackId

source ·
pub struct TrackId(/* private fields */);
Expand description

Unique track identifier.

If the media player implements the TrackList interface and allows the same track to appear multiple times in the tracklist, this @@ -17,13 +17,13 @@ interface similar to org.gnome.UPnP.MediaItem2.

Implementations§

source§

impl TrackId

source

pub const NO_TRACK: TrackId = _

A special track ID to indicate “no track”.

source

pub fn into_inner(self) -> ObjectPath<'static>

Returns the track ID as an [ObjectPath].

-

Methods from Deref<Target = ObjectPath<'static>>§

pub fn as_ref(&self) -> ObjectPath<'_>

A borrowed clone (this never allocates, unlike clone).

+

Methods from Deref<Target = ObjectPath<'static>>§

pub fn as_ref(&self) -> ObjectPath<'_>

This is faster than Clone::clone when self contains owned data.

pub fn as_str(&self) -> &str

The object path as a string.

pub fn as_bytes(&self) -> &[u8]

The object path as bytes.

pub fn len(&self) -> usize

the object path’s length.

pub fn is_empty(&self) -> bool

if the object path is empty.

pub fn to_owned(&self) -> ObjectPath<'static>

Creates an owned clone of self.

-

Methods from Deref<Target = str>§

1.0.0 · source

pub fn len(&self) -> usize

Returns the length of self.

+

Methods from Deref<Target = str>§

1.0.0 · source

pub fn len(&self) -> usize

Returns the length of self.

This length is in bytes, not chars or graphemes. In other words, it might not be what a human considers the length of the string.

§Examples
@@ -32,14 +32,14 @@
§Examples
assert_eq!("ƒoo".len(), 4); // fancy f! assert_eq!("ƒoo".chars().count(), 3);
-
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if self has a length of zero bytes.

+
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if self has a length of zero bytes.

§Examples
let s = "";
 assert!(s.is_empty());
 
 let s = "not empty";
 assert!(!s.is_empty());
-
1.9.0 · source

pub fn is_char_boundary(&self, index: usize) -> bool

Checks that index-th byte is the first byte in a UTF-8 code point +

1.9.0 · source

pub fn is_char_boundary(&self, index: usize) -> bool

Checks that index-th byte is the first byte in a UTF-8 code point sequence or the end of the string.

The start and end of the string (when index == self.len()) are considered to be boundaries.

@@ -56,7 +56,7 @@
§Examples
// third byte of `老` assert!(!s.is_char_boundary(8));
-
source

pub fn floor_char_boundary(&self, index: usize) -> usize

🔬This is a nightly-only experimental API. (round_char_boundary)

Finds the closest x not exceeding index where is_char_boundary(x) is true.

+
source

pub fn floor_char_boundary(&self, index: usize) -> usize

🔬This is a nightly-only experimental API. (round_char_boundary)

Finds the closest x not exceeding index where is_char_boundary(x) is true.

This method can help you truncate a string so that it’s still valid UTF-8, but doesn’t exceed a given number of bytes. Note that this is done purely at the character level and can still visually split graphemes, even though the underlying characters aren’t @@ -71,7 +71,7 @@

§Examples
let closest = s.floor_char_boundary(13); assert_eq!(closest, 10); assert_eq!(&s[..closest], "❤️🧡");
-
source

pub fn ceil_char_boundary(&self, index: usize) -> usize

🔬This is a nightly-only experimental API. (round_char_boundary)

Finds the closest x not below index where is_char_boundary(x) is true.

+
source

pub fn ceil_char_boundary(&self, index: usize) -> usize

🔬This is a nightly-only experimental API. (round_char_boundary)

Finds the closest x not below index where is_char_boundary(x) is true.

If index is greater than the length of the string, this returns the length of the string.

This method is the natural complement to floor_char_boundary. See that method for more details.

@@ -84,12 +84,12 @@
§Examples
let closest = s.ceil_char_boundary(13); assert_eq!(closest, 14); assert_eq!(&s[..closest], "❤️🧡💛");
-
1.0.0 · source

pub fn as_bytes(&self) -> &[u8]

Converts a string slice to a byte slice. To convert the byte slice back +

1.0.0 · source

pub fn as_bytes(&self) -> &[u8]

Converts a string slice to a byte slice. To convert the byte slice back into a string slice, use the from_utf8 function.

§Examples
let bytes = "bors".as_bytes();
 assert_eq!(b"bors", bytes);
-
1.0.0 · source

pub fn as_ptr(&self) -> *const u8

Converts a string slice to a raw pointer.

+
1.0.0 · source

pub fn as_ptr(&self) -> *const u8

Converts a string slice to a raw pointer.

As string slices are a slice of bytes, the raw pointer points to a u8. This pointer will be pointing to the first byte of the string slice.

@@ -98,7 +98,7 @@
§Examples
§Examples
let s = "Hello";
 let ptr = s.as_ptr();
-
1.20.0 · source

pub fn get<I>(&self, i: I) -> Option<&<I as SliceIndex<str>>::Output>
where +

1.20.0 · source

pub fn get<I>(&self, i: I) -> Option<&<I as SliceIndex<str>>::Output>
where I: SliceIndex<str>,

Returns a subslice of str.

This is the non-panicking alternative to indexing the str. Returns None whenever equivalent indexing operation would panic.

@@ -113,7 +113,7 @@
§Examples
// out of bounds assert!(v.get(..42).is_none());
-
1.20.0 · source

pub unsafe fn get_unchecked<I>(&self, i: I) -> &<I as SliceIndex<str>>::Output
where +

1.20.0 · source

pub unsafe fn get_unchecked<I>(&self, i: I) -> &<I as SliceIndex<str>>::Output
where I: SliceIndex<str>,

Returns an unchecked subslice of str.

This is the unchecked alternative to indexing the str.

§Safety
@@ -133,7 +133,7 @@
§Examples
assert_eq!("∈", v.get_unchecked(4..7)); assert_eq!("🌏", v.get_unchecked(7..11)); }
-
1.0.0 · source

pub unsafe fn slice_unchecked(&self, begin: usize, end: usize) -> &str

👎Deprecated since 1.29.0: use get_unchecked(begin..end) instead

Creates a string slice from another string slice, bypassing safety +

1.0.0 · source

pub unsafe fn slice_unchecked(&self, begin: usize, end: usize) -> &str

👎Deprecated since 1.29.0: use get_unchecked(begin..end) instead

Creates a string slice from another string slice, bypassing safety checks.

This is generally not recommended, use with caution! For a safe alternative see str and Index.

@@ -161,7 +161,7 @@
§Examples
unsafe { assert_eq!("world", s.slice_unchecked(7, 12)); }
-
1.4.0 · source

pub fn split_at(&self, mid: usize) -> (&str, &str)

Divide one string slice into two at an index.

+
1.4.0 · source

pub fn split_at(&self, mid: usize) -> (&str, &str)

Divide one string slice into two at an index.

The argument, mid, should be a byte offset from the start of the string. It must also be on the boundary of a UTF-8 code point.

The two slices returned go from the start of the string slice to mid, @@ -179,7 +179,7 @@

§Examplesassert_eq!("Per", first); assert_eq!(" Martin-Löf", last);
-
source

pub fn split_at_checked(&self, mid: usize) -> Option<(&str, &str)>

🔬This is a nightly-only experimental API. (split_at_checked)

Divide one string slice into two at an index.

+
source

pub fn split_at_checked(&self, mid: usize) -> Option<(&str, &str)>

🔬This is a nightly-only experimental API. (split_at_checked)

Divide one string slice into two at an index.

The argument, mid, should be a valid byte offset from the start of the string. It must also be on the boundary of a UTF-8 code point. The method returns None if that’s not the case.

@@ -198,7 +198,7 @@
§Examplesassert_eq!(None, s.split_at_checked(13)); // Inside “ö” assert_eq!(None, s.split_at_checked(16)); // Beyond the string length
-
1.0.0 · source

pub fn chars(&self) -> Chars<'_>

Returns an iterator over the chars of a string slice.

+
1.0.0 · source

pub fn chars(&self) -> Chars<'_>

Returns an iterator over the chars of a string slice.

As a string slice consists of valid UTF-8, we can iterate through a string slice by char. This method returns such an iterator.

It’s important to remember that char represents a Unicode Scalar @@ -234,7 +234,7 @@

§Examplesassert_eq!(Some('\u{0306}'), chars.next()); assert_eq!(None, chars.next());
-
1.0.0 · source

pub fn char_indices(&self) -> CharIndices<'_>

Returns an iterator over the chars of a string slice, and their +

1.0.0 · source

pub fn char_indices(&self) -> CharIndices<'_>

Returns an iterator over the chars of a string slice, and their positions.

As a string slice consists of valid UTF-8, we can iterate through a string slice by char. This method returns an iterator of both @@ -274,7 +274,7 @@

§Examplesassert_eq!(Some((4, 's')), char_indices.next()); assert_eq!(None, char_indices.next());
-
1.0.0 · source

pub fn bytes(&self) -> Bytes<'_>

An iterator over the bytes of a string slice.

+
1.0.0 · source

pub fn bytes(&self) -> Bytes<'_>

An iterator over the bytes of a string slice.

As a string slice consists of a sequence of bytes, we can iterate through a string slice by byte. This method returns such an iterator.

§Examples
@@ -286,7 +286,7 @@
§Examplesassert_eq!(Some(b's'), bytes.next()); assert_eq!(None, bytes.next());
-
1.1.0 · source

pub fn split_whitespace(&self) -> SplitWhitespace<'_>

Splits a string slice by whitespace.

+
1.1.0 · source

pub fn split_whitespace(&self) -> SplitWhitespace<'_>

Splits a string slice by whitespace.

The iterator returned will return string slices that are sub-slices of the original string slice, separated by any amount of whitespace.

‘Whitespace’ is defined according to the terms of the Unicode Derived @@ -316,7 +316,7 @@

§Examples
assert_eq!("".split_whitespace().next(), None);
 assert_eq!("   ".split_whitespace().next(), None);
-
1.34.0 · source

pub fn split_ascii_whitespace(&self) -> SplitAsciiWhitespace<'_>

Splits a string slice by ASCII whitespace.

+
1.34.0 · source

pub fn split_ascii_whitespace(&self) -> SplitAsciiWhitespace<'_>

Splits a string slice by ASCII whitespace.

The iterator returned will return string slices that are sub-slices of the original string slice, separated by any amount of ASCII whitespace.

To split by Unicode Whitespace instead, use split_whitespace.

@@ -344,7 +344,7 @@
§Examples
assert_eq!("".split_ascii_whitespace().next(), None);
 assert_eq!("   ".split_ascii_whitespace().next(), None);
-
1.0.0 · source

pub fn lines(&self) -> Lines<'_>

An iterator over the lines of a string, as string slices.

+
1.0.0 · source

pub fn lines(&self) -> Lines<'_>

An iterator over the lines of a string, as string slices.

Lines are split at line endings that are either newlines (\n) or sequences of a carriage return followed by a line feed (\r\n).

Line terminators are not included in the lines returned by the iterator.

@@ -378,8 +378,8 @@
§Examplesassert_eq!(Some("baz"), lines.next()); assert_eq!(None, lines.next());
-
1.0.0 · source

pub fn lines_any(&self) -> LinesAny<'_>

👎Deprecated since 1.4.0: use lines() instead now

An iterator over the lines of a string.

-
1.8.0 · source

pub fn encode_utf16(&self) -> EncodeUtf16<'_>

Returns an iterator of u16 over the string encoded as UTF-16.

+
1.0.0 · source

pub fn lines_any(&self) -> LinesAny<'_>

👎Deprecated since 1.4.0: use lines() instead now

An iterator over the lines of a string.

+
1.8.0 · source

pub fn encode_utf16(&self) -> EncodeUtf16<'_>

Returns an iterator of u16 over the string encoded as UTF-16.

§Examples
let text = "Zażółć gęślą jaźń";
 
@@ -387,7 +387,7 @@ 
§Exampleslet utf16_len = text.encode_utf16().count(); assert!(utf16_len <= utf8_len);
-
1.0.0 · source

pub fn contains<'a, P>(&'a self, pat: P) -> bool
where +

1.0.0 · source

pub fn contains<'a, P>(&'a self, pat: P) -> bool
where P: Pattern<'a>,

Returns true if the given pattern matches a sub-slice of this string slice.

Returns false if it does not.

@@ -398,18 +398,28 @@
§Examplesassert!(bananas.contains("nana")); assert!(!bananas.contains("apples"));
-
1.0.0 · source

pub fn starts_with<'a, P>(&'a self, pat: P) -> bool
where +

1.0.0 · source

pub fn starts_with<'a, P>(&'a self, pat: P) -> bool
where P: Pattern<'a>,

Returns true if the given pattern matches a prefix of this string slice.

Returns false if it does not.

-

The pattern can be a &str, char, a slice of chars, or a -function or closure that determines if a character matches.

+

The pattern can be a &str, in which case this function will return true if +the &str is a prefix of this string slice.

+

The pattern can also be a char, a slice of chars, or a +function or closure that determines if a character matches. +These will only be checked against the first character of this string slice. +Look at the second example below regarding behavior for slices of chars.

§Examples
let bananas = "bananas";
 
 assert!(bananas.starts_with("bana"));
 assert!(!bananas.starts_with("nana"));
-
1.0.0 · source

pub fn ends_with<'a, P>(&'a self, pat: P) -> bool
where + +
let bananas = "bananas";
+
+// Note that both of these assert successfully.
+assert!(bananas.starts_with(&['b', 'a', 'n', 'a']));
+assert!(bananas.starts_with(&['a', 'b', 'c', 'd']));
+

1.0.0 · source

pub fn ends_with<'a, P>(&'a self, pat: P) -> bool
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

Returns true if the given pattern matches a suffix of this string slice.

@@ -421,7 +431,7 @@
§Examplesassert!(bananas.ends_with("anas")); assert!(!bananas.ends_with("nana"));
-
1.0.0 · source

pub fn find<'a, P>(&'a self, pat: P) -> Option<usize>
where +

1.0.0 · source

pub fn find<'a, P>(&'a self, pat: P) -> Option<usize>
where P: Pattern<'a>,

Returns the byte index of the first character of this string slice that matches the pattern.

Returns None if the pattern doesn’t match.

@@ -449,7 +459,7 @@
§Exampleslet x: &[_] = &['1', '2']; assert_eq!(s.find(x), None);
-
1.0.0 · source

pub fn rfind<'a, P>(&'a self, pat: P) -> Option<usize>
where +

1.0.0 · source

pub fn rfind<'a, P>(&'a self, pat: P) -> Option<usize>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

Returns the byte index for the first character of the last match of the pattern in this string slice.

@@ -476,7 +486,7 @@
§Exampleslet x: &[_] = &['1', '2']; assert_eq!(s.rfind(x), None);
-
1.0.0 · source

pub fn split<'a, P>(&'a self, pat: P) -> Split<'a, P>
where +

1.0.0 · source

pub fn split<'a, P>(&'a self, pat: P) -> Split<'a, P>
where P: Pattern<'a>,

An iterator over substrings of this string slice, separated by characters matched by a pattern.

The pattern can be a &str, char, a slice of chars, or a @@ -550,7 +560,7 @@

§Examples
assert_eq!(d, &["a", "b", "c"]);

Use split_whitespace for this behavior.

-
1.51.0 · source

pub fn split_inclusive<'a, P>(&'a self, pat: P) -> SplitInclusive<'a, P>
where +

1.51.0 · source

pub fn split_inclusive<'a, P>(&'a self, pat: P) -> SplitInclusive<'a, P>
where P: Pattern<'a>,

An iterator over substrings of this string slice, separated by characters matched by a pattern. Differs from the iterator produced by split in that split_inclusive leaves the matched part as the @@ -568,7 +578,7 @@

§Examples
let v: Vec<&str> = "Mary had a little lamb\nlittle lamb\nlittle lamb.\n"
     .split_inclusive('\n').collect();
 assert_eq!(v, ["Mary had a little lamb\n", "little lamb\n", "little lamb.\n"]);
-
1.0.0 · source

pub fn rsplit<'a, P>(&'a self, pat: P) -> RSplit<'a, P>
where +

1.0.0 · source

pub fn rsplit<'a, P>(&'a self, pat: P) -> RSplit<'a, P>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

An iterator over substrings of the given string slice, separated by characters matched by a pattern and yielded in reverse order.

@@ -597,7 +607,7 @@
§Examples
let v: Vec<&str> = "abc1defXghi".rsplit(|c| c == '1' || c == 'X').collect();
 assert_eq!(v, ["ghi", "def", "abc"]);
-
1.0.0 · source

pub fn split_terminator<'a, P>(&'a self, pat: P) -> SplitTerminator<'a, P>
where +

1.0.0 · source

pub fn split_terminator<'a, P>(&'a self, pat: P) -> SplitTerminator<'a, P>
where P: Pattern<'a>,

An iterator over substrings of the given string slice, separated by characters matched by a pattern.

The pattern can be a &str, char, a slice of chars, or a @@ -621,7 +631,7 @@

§Exampleslet v: Vec<&str> = "A.B:C.D".split_terminator(&['.', ':'][..]).collect(); assert_eq!(v, ["A", "B", "C", "D"]);
-
1.0.0 · source

pub fn rsplit_terminator<'a, P>(&'a self, pat: P) -> RSplitTerminator<'a, P>
where +

1.0.0 · source

pub fn rsplit_terminator<'a, P>(&'a self, pat: P) -> RSplitTerminator<'a, P>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

An iterator over substrings of self, separated by characters matched by a pattern and yielded in reverse order.

@@ -646,7 +656,7 @@
§Exampleslet v: Vec<&str> = "A.B:C.D".rsplit_terminator(&['.', ':'][..]).collect(); assert_eq!(v, ["D", "C", "B", "A"]);
-
1.0.0 · source

pub fn splitn<'a, P>(&'a self, n: usize, pat: P) -> SplitN<'a, P>
where +

1.0.0 · source

pub fn splitn<'a, P>(&'a self, n: usize, pat: P) -> SplitN<'a, P>
where P: Pattern<'a>,

An iterator over substrings of the given string slice, separated by a pattern, restricted to returning at most n items.

If n substrings are returned, the last substring (the nth substring) @@ -676,7 +686,7 @@

§Examples
let v: Vec<&str> = "abc1defXghi".splitn(2, |c| c == '1' || c == 'X').collect();
 assert_eq!(v, ["abc", "defXghi"]);
-
1.0.0 · source

pub fn rsplitn<'a, P>(&'a self, n: usize, pat: P) -> RSplitN<'a, P>
where +

1.0.0 · source

pub fn rsplitn<'a, P>(&'a self, n: usize, pat: P) -> RSplitN<'a, P>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

An iterator over substrings of this string slice, separated by a pattern, starting from the end of the string, restricted to returning @@ -704,7 +714,7 @@

§Examples
let v: Vec<&str> = "abc1defXghi".rsplitn(2, |c| c == '1' || c == 'X').collect();
 assert_eq!(v, ["ghi", "abc1def"]);
-
1.52.0 · source

pub fn split_once<'a, P>(&'a self, delimiter: P) -> Option<(&'a str, &'a str)>
where +

1.52.0 · source

pub fn split_once<'a, P>(&'a self, delimiter: P) -> Option<(&'a str, &'a str)>
where P: Pattern<'a>,

Splits the string on the first occurrence of the specified delimiter and returns prefix before delimiter and suffix after delimiter.

§Examples
@@ -712,7 +722,7 @@
§Examplesassert_eq!("cfg=".split_once('='), Some(("cfg", ""))); assert_eq!("cfg=foo".split_once('='), Some(("cfg", "foo"))); assert_eq!("cfg=foo=bar".split_once('='), Some(("cfg", "foo=bar")));
-
1.52.0 · source

pub fn rsplit_once<'a, P>(&'a self, delimiter: P) -> Option<(&'a str, &'a str)>
where +

1.52.0 · source

pub fn rsplit_once<'a, P>(&'a self, delimiter: P) -> Option<(&'a str, &'a str)>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

Splits the string on the last occurrence of the specified delimiter and returns prefix before delimiter and suffix after delimiter.

@@ -720,7 +730,7 @@
§Examples
assert_eq!("cfg".rsplit_once('='), None);
 assert_eq!("cfg=foo".rsplit_once('='), Some(("cfg", "foo")));
 assert_eq!("cfg=foo=bar".rsplit_once('='), Some(("cfg=foo", "bar")));
-
1.2.0 · source

pub fn matches<'a, P>(&'a self, pat: P) -> Matches<'a, P>
where +

1.2.0 · source

pub fn matches<'a, P>(&'a self, pat: P) -> Matches<'a, P>
where P: Pattern<'a>,

An iterator over the disjoint matches of a pattern within the given string slice.

The pattern can be a &str, char, a slice of chars, or a @@ -737,7 +747,7 @@

§Exampleslet v: Vec<&str> = "1abc2abc3".matches(char::is_numeric).collect(); assert_eq!(v, ["1", "2", "3"]);
-
1.2.0 · source

pub fn rmatches<'a, P>(&'a self, pat: P) -> RMatches<'a, P>
where +

1.2.0 · source

pub fn rmatches<'a, P>(&'a self, pat: P) -> RMatches<'a, P>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

An iterator over the disjoint matches of a pattern within this string slice, yielded in reverse order.

@@ -754,7 +764,7 @@
§Exampleslet v: Vec<&str> = "1abc2abc3".rmatches(char::is_numeric).collect(); assert_eq!(v, ["3", "2", "1"]);
-
1.5.0 · source

pub fn match_indices<'a, P>(&'a self, pat: P) -> MatchIndices<'a, P>
where +

1.5.0 · source

pub fn match_indices<'a, P>(&'a self, pat: P) -> MatchIndices<'a, P>
where P: Pattern<'a>,

An iterator over the disjoint matches of a pattern within this string slice as well as the index that the match starts at.

For matches of pat within self that overlap, only the indices @@ -776,7 +786,7 @@

§Exampleslet v: Vec<_> = "ababa".match_indices("aba").collect(); assert_eq!(v, [(0, "aba")]); // only the first `aba`
-
1.5.0 · source

pub fn rmatch_indices<'a, P>(&'a self, pat: P) -> RMatchIndices<'a, P>
where +

1.5.0 · source

pub fn rmatch_indices<'a, P>(&'a self, pat: P) -> RMatchIndices<'a, P>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

An iterator over the disjoint matches of a pattern within self, yielded in reverse order along with the index of the match.

@@ -798,14 +808,14 @@
§Exampleslet v: Vec<_> = "ababa".rmatch_indices("aba").collect(); assert_eq!(v, [(2, "aba")]); // only the last `aba`
-
1.0.0 · source

pub fn trim(&self) -> &str

Returns a string slice with leading and trailing whitespace removed.

+
1.0.0 · source

pub fn trim(&self) -> &str

Returns a string slice with leading and trailing whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space, which includes newlines.

§Examples
let s = "\n Hello\tworld\t\n";
 
 assert_eq!("Hello\tworld", s.trim());
-
1.30.0 · source

pub fn trim_start(&self) -> &str

Returns a string slice with leading whitespace removed.

+
1.30.0 · source

pub fn trim_start(&self) -> &str

Returns a string slice with leading whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space, which includes newlines.

§Text directionality
@@ -825,7 +835,7 @@
§Exampleslet s = " עברית "; assert!(Some('ע') == s.trim_start().chars().next());
-
1.30.0 · source

pub fn trim_end(&self) -> &str

Returns a string slice with trailing whitespace removed.

+
1.30.0 · source

pub fn trim_end(&self) -> &str

Returns a string slice with trailing whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space, which includes newlines.

§Text directionality
@@ -845,7 +855,7 @@
§Exampleslet s = " עברית "; assert!(Some('ת') == s.trim_end().chars().rev().next());
-
1.0.0 · source

pub fn trim_left(&self) -> &str

👎Deprecated since 1.33.0: superseded by trim_start

Returns a string slice with leading whitespace removed.

+
1.0.0 · source

pub fn trim_left(&self) -> &str

👎Deprecated since 1.33.0: superseded by trim_start

Returns a string slice with leading whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space.

§Text directionality
@@ -866,7 +876,7 @@
§Exampleslet s = " עברית"; assert!(Some('ע') == s.trim_left().chars().next());
-
1.0.0 · source

pub fn trim_right(&self) -> &str

👎Deprecated since 1.33.0: superseded by trim_end

Returns a string slice with trailing whitespace removed.

+
1.0.0 · source

pub fn trim_right(&self) -> &str

👎Deprecated since 1.33.0: superseded by trim_end

Returns a string slice with trailing whitespace removed.

‘Whitespace’ is defined according to the terms of the Unicode Derived Core Property White_Space.

§Text directionality
@@ -887,7 +897,7 @@
§Exampleslet s = "עברית "; assert!(Some('ת') == s.trim_right().chars().rev().next());
-
1.0.0 · source

pub fn trim_matches<'a, P>(&'a self, pat: P) -> &'a str
where +

1.0.0 · source

pub fn trim_matches<'a, P>(&'a self, pat: P) -> &'a str
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: DoubleEndedSearcher<'a>,

Returns a string slice with all prefixes and suffixes that match a pattern repeatedly removed.

@@ -904,7 +914,7 @@
§ExamplesA more complex pattern, using a closure:

assert_eq!("1foo1barXX".trim_matches(|c| c == '1' || c == 'X'), "foo1bar");
-
1.30.0 · source

pub fn trim_start_matches<'a, P>(&'a self, pat: P) -> &'a str
where +

1.30.0 · source

pub fn trim_start_matches<'a, P>(&'a self, pat: P) -> &'a str
where P: Pattern<'a>,

Returns a string slice with all prefixes that match a pattern repeatedly removed.

The pattern can be a &str, char, a slice of chars, or a @@ -920,7 +930,7 @@

§Exampleslet x: &[_] = &['1', '2']; assert_eq!("12foo1bar12".trim_start_matches(x), "foo1bar12");
-
1.45.0 · source

pub fn strip_prefix<'a, P>(&'a self, prefix: P) -> Option<&'a str>
where +

1.45.0 · source

pub fn strip_prefix<'a, P>(&'a self, prefix: P) -> Option<&'a str>
where P: Pattern<'a>,

Returns a string slice with the prefix removed.

If the string starts with the pattern prefix, returns substring after the prefix, wrapped in Some. Unlike trim_start_matches, this method removes the prefix exactly once.

@@ -931,7 +941,7 @@
§Examples
assert_eq!("foo:bar".strip_prefix("foo:"), Some("bar"));
 assert_eq!("foo:bar".strip_prefix("bar"), None);
 assert_eq!("foofoo".strip_prefix("foo"), Some("foo"));
-
1.45.0 · source

pub fn strip_suffix<'a, P>(&'a self, suffix: P) -> Option<&'a str>
where +

1.45.0 · source

pub fn strip_suffix<'a, P>(&'a self, suffix: P) -> Option<&'a str>
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

Returns a string slice with the suffix removed.

If the string ends with the pattern suffix, returns the substring before the suffix, @@ -943,7 +953,7 @@

§Examples
assert_eq!("bar:foo".strip_suffix(":foo"), Some("bar"));
 assert_eq!("bar:foo".strip_suffix("bar"), None);
 assert_eq!("foofoo".strip_suffix("foo"), Some("foo"));
-
1.30.0 · source

pub fn trim_end_matches<'a, P>(&'a self, pat: P) -> &'a str
where +

1.30.0 · source

pub fn trim_end_matches<'a, P>(&'a self, pat: P) -> &'a str
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

Returns a string slice with all suffixes that match a pattern repeatedly removed.

@@ -965,7 +975,7 @@
§ExamplesA more complex pattern, using a closure:

assert_eq!("1fooX".trim_end_matches(|c| c == '1' || c == 'X'), "1foo");
-
1.0.0 · source

pub fn trim_left_matches<'a, P>(&'a self, pat: P) -> &'a str
where +

1.0.0 · source

pub fn trim_left_matches<'a, P>(&'a self, pat: P) -> &'a str
where P: Pattern<'a>,

👎Deprecated since 1.33.0: superseded by trim_start_matches

Returns a string slice with all prefixes that match a pattern repeatedly removed.

The pattern can be a &str, char, a slice of chars, or a @@ -981,7 +991,7 @@

§Exampleslet x: &[_] = &['1', '2']; assert_eq!("12foo1bar12".trim_left_matches(x), "foo1bar12");
-
1.0.0 · source

pub fn trim_right_matches<'a, P>(&'a self, pat: P) -> &'a str
where +

1.0.0 · source

pub fn trim_right_matches<'a, P>(&'a self, pat: P) -> &'a str
where P: Pattern<'a>, <P as Pattern<'a>>::Searcher: ReverseSearcher<'a>,

👎Deprecated since 1.33.0: superseded by trim_end_matches

Returns a string slice with all suffixes that match a pattern repeatedly removed.

@@ -1003,7 +1013,7 @@
§ExamplesA more complex pattern, using a closure:

assert_eq!("1fooX".trim_right_matches(|c| c == '1' || c == 'X'), "1foo");
-
1.0.0 · source

pub fn parse<F>(&self) -> Result<F, <F as FromStr>::Err>
where +

1.0.0 · source

pub fn parse<F>(&self) -> Result<F, <F as FromStr>::Err>
where F: FromStr,

Parses this string slice into another type.

Because parse is so general, it can cause problems with type inference. As such, parse is one of the few times you’ll see @@ -1030,23 +1040,23 @@

§Examples
let nope = "j".parse::<u32>();
 
 assert!(nope.is_err());
-
1.23.0 · source

pub fn is_ascii(&self) -> bool

Checks if all characters in this string are within the ASCII range.

+
1.23.0 · source

pub fn is_ascii(&self) -> bool

Checks if all characters in this string are within the ASCII range.

§Examples
let ascii = "hello!\n";
 let non_ascii = "Grüße, Jürgen ❤";
 
 assert!(ascii.is_ascii());
 assert!(!non_ascii.is_ascii());
-
source

pub fn as_ascii(&self) -> Option<&[AsciiChar]>

🔬This is a nightly-only experimental API. (ascii_char)

If this string slice is_ascii, returns it as a slice +

source

pub fn as_ascii(&self) -> Option<&[AsciiChar]>

🔬This is a nightly-only experimental API. (ascii_char)

If this string slice is_ascii, returns it as a slice of ASCII characters, otherwise returns None.

-
1.23.0 · source

pub fn eq_ignore_ascii_case(&self, other: &str) -> bool

Checks that two strings are an ASCII case-insensitive match.

+
1.23.0 · source

pub fn eq_ignore_ascii_case(&self, other: &str) -> bool

Checks that two strings are an ASCII case-insensitive match.

Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), but without allocating and copying temporaries.

§Examples
assert!("Ferris".eq_ignore_ascii_case("FERRIS"));
 assert!("Ferrös".eq_ignore_ascii_case("FERRöS"));
 assert!(!"Ferrös".eq_ignore_ascii_case("FERRÖS"));
-
source

pub fn trim_ascii_start(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with leading ASCII whitespace removed.

+
source

pub fn trim_ascii_start(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with leading ASCII whitespace removed.

‘Whitespace’ refers to the definition used by u8::is_ascii_whitespace.

§Examples
@@ -1055,7 +1065,7 @@
§Examplesassert_eq!(" \t \u{3000}hello world\n".trim_ascii_start(), "\u{3000}hello world\n"); assert_eq!(" ".trim_ascii_start(), ""); assert_eq!("".trim_ascii_start(), "");
-
source

pub fn trim_ascii_end(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with trailing ASCII whitespace removed.

+
source

pub fn trim_ascii_end(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with trailing ASCII whitespace removed.

‘Whitespace’ refers to the definition used by u8::is_ascii_whitespace.

§Examples
@@ -1064,7 +1074,7 @@
§Examplesassert_eq!("\r hello world\u{3000}\n ".trim_ascii_end(), "\r hello world\u{3000}"); assert_eq!(" ".trim_ascii_end(), ""); assert_eq!("".trim_ascii_end(), "");
-
source

pub fn trim_ascii(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with leading and trailing ASCII whitespace +

source

pub fn trim_ascii(&self) -> &str

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a string slice with leading and trailing ASCII whitespace removed.

‘Whitespace’ refers to the definition used by u8::is_ascii_whitespace.

@@ -1074,7 +1084,7 @@
§Examplesassert_eq!("\r hello world\n ".trim_ascii(), "hello world"); assert_eq!(" ".trim_ascii(), ""); assert_eq!("".trim_ascii(), "");
-
1.34.0 · source

pub fn escape_debug(&self) -> EscapeDebug<'_>

Return an iterator that escapes each char in self with char::escape_debug.

+
1.34.0 · source

pub fn escape_debug(&self) -> EscapeDebug<'_>

Return an iterator that escapes each char in self with char::escape_debug.

Note: only extended grapheme codepoints that begin the string will be escaped.

§Examples
@@ -1093,7 +1103,7 @@
§ExamplesUsing to_string:

assert_eq!("❤\n!".escape_debug().to_string(), "❤\\n!");
-
1.34.0 · source

pub fn escape_default(&self) -> EscapeDefault<'_>

Return an iterator that escapes each char in self with char::escape_default.

+
1.34.0 · source

pub fn escape_default(&self) -> EscapeDefault<'_>

Return an iterator that escapes each char in self with char::escape_default.

§Examples

As an iterator:

@@ -1110,7 +1120,7 @@
§ExamplesUsing to_string:

assert_eq!("❤\n!".escape_default().to_string(), "\\u{2764}\\n!");
-
1.34.0 · source

pub fn escape_unicode(&self) -> EscapeUnicode<'_>

Return an iterator that escapes each char in self with char::escape_unicode.

+
1.34.0 · source

pub fn escape_unicode(&self) -> EscapeUnicode<'_>

Return an iterator that escapes each char in self with char::escape_unicode.

§Examples

As an iterator:

@@ -1127,7 +1137,7 @@
§ExamplesUsing to_string:

assert_eq!("❤\n!".escape_unicode().to_string(), "\\u{2764}\\u{a}\\u{21}");
-
1.0.0 · source

pub fn replace<'a, P>(&'a self, from: P, to: &str) -> String
where +

1.0.0 · source

pub fn replace<'a, P>(&'a self, from: P, to: &str) -> String
where P: Pattern<'a>,

Replaces all matches of a pattern with another string.

replace creates a new String, and copies the data from this string slice into it. While doing so, it attempts to find matches of a pattern. If it finds any, it @@ -1143,7 +1153,7 @@

§Examples
let s = "this is old";
 assert_eq!(s, s.replace("cookie monster", "little lamb"));
-
1.16.0 · source

pub fn replacen<'a, P>(&'a self, pat: P, to: &str, count: usize) -> String
where +

1.16.0 · source

pub fn replacen<'a, P>(&'a self, pat: P, to: &str, count: usize) -> String
where P: Pattern<'a>,

Replaces first N matches of a pattern with another string.

replacen creates a new String, and copies the data from this string slice into it. While doing so, it attempts to find matches of a pattern. If it finds any, it @@ -1159,7 +1169,7 @@

§Examples
let s = "this is old";
 assert_eq!(s, s.replacen("cookie monster", "little lamb", 10));
-
1.2.0 · source

pub fn to_lowercase(&self) -> String

Returns the lowercase equivalent of this string slice, as a new String.

+
1.2.0 · source

pub fn to_lowercase(&self) -> String

Returns the lowercase equivalent of this string slice, as a new String.

‘Lowercase’ is defined according to the terms of the Unicode Derived Core Property Lowercase.

Since some characters can expand into multiple characters when changing @@ -1186,7 +1196,7 @@

§Examples
let new_year = "农历新年";
 
 assert_eq!(new_year, new_year.to_lowercase());
-
1.2.0 · source

pub fn to_uppercase(&self) -> String

Returns the uppercase equivalent of this string slice, as a new String.

+
1.2.0 · source

pub fn to_uppercase(&self) -> String

Returns the uppercase equivalent of this string slice, as a new String.

‘Uppercase’ is defined according to the terms of the Unicode Derived Core Property Uppercase.

Since some characters can expand into multiple characters when changing @@ -1208,7 +1218,7 @@

§Examples
let s = "tschüß";
 
 assert_eq!("TSCHÜSS", s.to_uppercase());
-
1.16.0 · source

pub fn repeat(&self, n: usize) -> String

Creates a new String by repeating a string n times.

+
1.16.0 · source

pub fn repeat(&self, n: usize) -> String

Creates a new String by repeating a string n times.

§Panics

This function will panic if the capacity would overflow.

§Examples
@@ -1219,7 +1229,7 @@
§Examples
// this will panic at runtime
 let huge = "0123456789abcdef".repeat(usize::MAX);
-
1.23.0 · source

pub fn to_ascii_uppercase(&self) -> String

Returns a copy of this string where each character is mapped to its +

1.23.0 · source

pub fn to_ascii_uppercase(&self) -> String

Returns a copy of this string where each character is mapped to its ASCII upper case equivalent.

ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, but non-ASCII letters are unchanged.

@@ -1230,7 +1240,7 @@
§Examples
let s = "Grüße, Jürgen ❤";
 
 assert_eq!("GRüßE, JüRGEN ❤", s.to_ascii_uppercase());
-
1.23.0 · source

pub fn to_ascii_lowercase(&self) -> String

Returns a copy of this string where each character is mapped to its +

1.23.0 · source

pub fn to_ascii_lowercase(&self) -> String

Returns a copy of this string where each character is mapped to its ASCII lower case equivalent.

ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, but non-ASCII letters are unchanged.

@@ -1241,13 +1251,13 @@
§Examples
let s = "Grüße, Jürgen ❤";
 
 assert_eq!("grüße, jürgen ❤", s.to_ascii_lowercase());
-

Trait Implementations§

source§

impl Clone for TrackId

source§

fn clone(&self) -> TrackId

Returns a copy 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 TrackId

source§

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

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

impl Default for TrackId

source§

fn default() -> TrackId

Returns the “default value” for a type. Read more
source§

impl Deref for TrackId

§

type Target = ObjectPath<'static>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<'de> Deserialize<'de> for TrackId

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where - D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for TrackId

source§

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

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

impl<'unowned, 'owned: 'unowned> From<&'owned TrackId> for ObjectPath<'unowned>

source§

fn from(o: &'owned TrackId) -> Self

Converts to this type from the input type.
source§

impl<'a> From<ObjectPath<'a>> for TrackId

source§

fn from(o: ObjectPath<'a>) -> Self

Converts to this type from the input type.
source§

impl From<TrackId> for ObjectPath<'static>

source§

fn from(o: TrackId) -> Self

Converts to this type from the input type.
source§

impl From<TrackId> for Value<'static>

source§

fn from(o: TrackId) -> Self

Converts to this type from the input type.
source§

impl Hash for TrackId

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Basic for TrackId

source§

const SIGNATURE_CHAR: char = 'o'

The type signature, as a character.
source§

const SIGNATURE_STR: &'static str = ObjectPath::SIGNATURE_STR

The type signature, as a string.
source§

fn alignment(format: Format) -> usize

The required padding alignment for the given format.
source§

impl Clone for TrackId

source§

fn clone(&self) -> TrackId

Returns a copy 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 TrackId

source§

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

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

impl Default for TrackId

source§

fn default() -> TrackId

Returns the “default value” for a type. Read more
source§

impl Deref for TrackId

§

type Target = ObjectPath<'static>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl<'de> Deserialize<'de> for TrackId

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where + D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for TrackId

source§

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

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

impl<'unowned, 'owned: 'unowned> From<&'owned TrackId> for ObjectPath<'unowned>

source§

fn from(o: &'owned TrackId) -> Self

Converts to this type from the input type.
source§

impl<'a> From<ObjectPath<'a>> for TrackId

source§

fn from(o: ObjectPath<'a>) -> Self

Converts to this type from the input type.
source§

impl From<TrackId> for ObjectPath<'static>

source§

fn from(o: TrackId) -> Self

Converts to this type from the input type.
source§

impl From<TrackId> for Value<'_>

source§

fn from(o: TrackId) -> Self

Converts to this type from the input type.
source§

impl Hash for TrackId

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for TrackId

source§

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

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always +by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for TrackId

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TryFrom<&str> for TrackId

§

type Error = Error

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

fn try_from(value: &str) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<String> for TrackId

§

type Error = Error

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

fn try_from(value: String) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<Value<'_>> for TrackId

§

type Error = Error

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

fn try_from(value: Value<'_>) -> Result<Self>

Performs the conversion.
source§

impl Type for TrackId

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Eq for TrackId

source§

impl StructuralEq for TrackId

source§

impl StructuralPartialEq for TrackId

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TryFrom<&str> for TrackId

§

type Error = Error

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

fn try_from(value: &str) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<String> for TrackId

§

type Error = Error

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

fn try_from(value: String) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<Value<'_>> for TrackId

§

type Error = Error

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

fn try_from(value: Value<'_>) -> Result<Self>

Performs the conversion.
source§

impl Type for TrackId

source§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
source§

impl Eq for TrackId

source§

impl StructuralPartialEq for TrackId

Auto Trait Implementations§

§

impl RefUnwindSafe for TrackId

§

impl Send for TrackId

§

impl Sync for TrackId

§

impl Unpin for TrackId

§

impl UnwindSafe for TrackId

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
§

impl<'de, T> DynamicDeserialize<'de> for T
where diff --git a/mpris_server/trait.LocalPlayerInterface.html b/mpris_server/trait.LocalPlayerInterface.html index 55d27e2..5407ed9 100644 --- a/mpris_server/trait.LocalPlayerInterface.html +++ b/mpris_server/trait.LocalPlayerInterface.html @@ -1,4 +1,4 @@ -LocalPlayerInterface in mpris_server - Rust +LocalPlayerInterface in mpris_server - Rust
pub trait LocalPlayerInterface: LocalRootInterface {
 
Show 28 methods // Required methods fn next<'life0, 'async_trait>( diff --git a/mpris_server/trait.LocalPlaylistsInterface.html b/mpris_server/trait.LocalPlaylistsInterface.html index 0ac8877..24cbc44 100644 --- a/mpris_server/trait.LocalPlaylistsInterface.html +++ b/mpris_server/trait.LocalPlaylistsInterface.html @@ -1,4 +1,4 @@ -LocalPlaylistsInterface in mpris_server - Rust +LocalPlaylistsInterface in mpris_server - Rust
pub trait LocalPlaylistsInterface: LocalPlayerInterface {
     // Required methods
     fn activate_playlist<'life0, 'async_trait>(
diff --git a/mpris_server/trait.LocalRootInterface.html b/mpris_server/trait.LocalRootInterface.html
index 7c2b1c3..62d5d69 100644
--- a/mpris_server/trait.LocalRootInterface.html
+++ b/mpris_server/trait.LocalRootInterface.html
@@ -1,4 +1,4 @@
-LocalRootInterface in mpris_server - Rust
+LocalRootInterface in mpris_server - Rust
     
pub trait LocalRootInterface {
     // Required methods
     fn raise<'life0, 'async_trait>(
diff --git a/mpris_server/trait.LocalTrackListInterface.html b/mpris_server/trait.LocalTrackListInterface.html
index 8e55ce6..c26c54d 100644
--- a/mpris_server/trait.LocalTrackListInterface.html
+++ b/mpris_server/trait.LocalTrackListInterface.html
@@ -1,4 +1,4 @@
-LocalTrackListInterface in mpris_server - Rust
+LocalTrackListInterface in mpris_server - Rust
     
pub trait LocalTrackListInterface: LocalPlayerInterface {
     // Required methods
     fn get_tracks_metadata<'life0, 'async_trait>(
diff --git a/mpris_server/trait.PlayerInterface.html b/mpris_server/trait.PlayerInterface.html
index 1d4b1dd..3dad233 100644
--- a/mpris_server/trait.PlayerInterface.html
+++ b/mpris_server/trait.PlayerInterface.html
@@ -1,4 +1,4 @@
-PlayerInterface in mpris_server - Rust
+PlayerInterface in mpris_server - Rust
     
pub trait PlayerInterface: RootInterface {
 
Show 28 methods // Required methods fn next<'life0, 'async_trait>( diff --git a/mpris_server/trait.PlaylistsInterface.html b/mpris_server/trait.PlaylistsInterface.html index 095308e..2fb4419 100644 --- a/mpris_server/trait.PlaylistsInterface.html +++ b/mpris_server/trait.PlaylistsInterface.html @@ -1,4 +1,4 @@ -PlaylistsInterface in mpris_server - Rust +PlaylistsInterface in mpris_server - Rust
pub trait PlaylistsInterface: PlayerInterface {
     // Required methods
     fn activate_playlist<'life0, 'async_trait>(
diff --git a/mpris_server/trait.RootInterface.html b/mpris_server/trait.RootInterface.html
index 6c40ebe..8254307 100644
--- a/mpris_server/trait.RootInterface.html
+++ b/mpris_server/trait.RootInterface.html
@@ -1,4 +1,4 @@
-RootInterface in mpris_server - Rust
+RootInterface in mpris_server - Rust
     
pub trait RootInterface: Send + Sync {
     // Required methods
     fn raise<'life0, 'async_trait>(
diff --git a/mpris_server/trait.TrackListInterface.html b/mpris_server/trait.TrackListInterface.html
index 5c9f939..885c436 100644
--- a/mpris_server/trait.TrackListInterface.html
+++ b/mpris_server/trait.TrackListInterface.html
@@ -1,4 +1,4 @@
-TrackListInterface in mpris_server - Rust
+TrackListInterface in mpris_server - Rust
     
pub trait TrackListInterface: PlayerInterface {
     // Required methods
     fn get_tracks_metadata<'life0, 'async_trait>(
diff --git a/mpris_server/type.DateTime.html b/mpris_server/type.DateTime.html
index 03bafa9..baafbcf 100644
--- a/mpris_server/type.DateTime.html
+++ b/mpris_server/type.DateTime.html
@@ -1,4 +1,4 @@
-DateTime in mpris_server - Rust
+DateTime in mpris_server - Rust
     

Type Alias mpris_server::DateTime

source ·
pub type DateTime = String;
Expand description

Combined date and time.

This should be sent as strings in ISO 8601 extended format (eg: 2007-04-29T14:35:51). If the timezone is known (eg: for diff --git a/mpris_server/type.PlaybackRate.html b/mpris_server/type.PlaybackRate.html index 8432918..babc81b 100644 --- a/mpris_server/type.PlaybackRate.html +++ b/mpris_server/type.PlaybackRate.html @@ -1,4 +1,4 @@ -PlaybackRate in mpris_server - Rust

+PlaybackRate in mpris_server - Rust

Type Alias mpris_server::PlaybackRate

source ·
pub type PlaybackRate = f64;
Expand description

A playback rate.

This is a multiplier, so a value of 0.5 indicates that playback is happening at half speed, while 1.5 means that 1.5 seconds of diff --git a/mpris_server/type.PlaylistId.html b/mpris_server/type.PlaylistId.html index 806b967..216723e 100644 --- a/mpris_server/type.PlaylistId.html +++ b/mpris_server/type.PlaylistId.html @@ -1,4 +1,4 @@ -PlaylistId in mpris_server - Rust

+PlaylistId in mpris_server - Rust

Type Alias mpris_server::PlaylistId

source ·
pub type PlaylistId = OwnedObjectPath;
Expand description

Unique playlist identifier.

Rationale

Multiple playlists may have the same name.

diff --git a/mpris_server/type.Uri.html b/mpris_server/type.Uri.html index dc8c31f..b76dae7 100644 --- a/mpris_server/type.Uri.html +++ b/mpris_server/type.Uri.html @@ -1,4 +1,4 @@ -Uri in mpris_server - Rust +Uri in mpris_server - Rust

Type Alias mpris_server::Uri

source ·
pub type Uri = String;
Expand description

A unique resource identifier.

URIs should be sent as (UTF-8) strings. Local files should use the “file://” schema.

diff --git a/mpris_server/type.Volume.html b/mpris_server/type.Volume.html index 1e84786..09440fc 100644 --- a/mpris_server/type.Volume.html +++ b/mpris_server/type.Volume.html @@ -1,4 +1,4 @@ -Volume in mpris_server - Rust +Volume in mpris_server - Rust

Type Alias mpris_server::Volume

source ·
pub type Volume = f64;
Expand description

Audio volume level.

  • 0.0 means mute.
  • diff --git a/search-index.js b/search-index.js index 0045ae1..e7927dc 100644 --- a/search-index.js +++ b/search-index.js @@ -1,5 +1,5 @@ var searchIndex = new Map(JSON.parse('[\ -["mpris_server",{"doc":"MPRIS Server","t":"PPPPPPPPPPPPIPPPPPKKKFFKGPTTPFPPPTPPPIGPFKPFPPPIGKGGGPKPFPGPPPFPPFKGPGPPPIPIPTNMMMMNNMMNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNMMNMMMMNMMNMMNMMNMMNMMNMMNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNMMMMNMMMMNNNOOMMNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNMMNMMNMMNONNNNNNNNNMMNNNMMMMNMMMMMMMMNMMNNNNNMMNMMNNMMMMMMNMMNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNMMNNNNNNNMMNMMNMMNNNNNNNNNNMMNMMNNNNNNNNMMNNMMNMMNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNEOOOOOOOOOFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["ActivePlaylist","Alphabetical","CanEditTracks","CanGoNext","CanGoPrevious","CanPause","CanPlay","CanQuit","CanRaise","CanSeek","CanSetFullscreen","CreationDate","DateTime","DesktopEntry","Fullscreen","HasTrackList","Identity","LastPlayDate","LocalPlayerInterface","LocalPlaylistsInterface","LocalRootInterface","LocalServer","LocalServerRunTask","LocalTrackListInterface","LoopStatus","LoopStatus","MAX","MIN","MaximumRate","Metadata","Metadata","MinimumRate","ModifiedDate","NO_TRACK","None","Orderings","Paused","PlaybackRate","PlaybackStatus","PlaybackStatus","Player","PlayerInterface","Playing","Playlist","Playlist","PlaylistChanged","PlaylistCount","PlaylistId","PlaylistOrdering","PlaylistsInterface","PlaylistsProperty","PlaylistsSignal","Property","Rate","RootInterface","Seeked","Server","Shuffle","Signal","Stopped","SupportedMimeTypes","SupportedUriSchemes","Time","Track","TrackAdded","TrackId","TrackListInterface","TrackListProperty","TrackListReplaced","TrackListSignal","TrackMetadataChanged","TrackRemoved","Tracks","Uri","UserDefined","Volume","Volume","ZERO","abs","activate_playlist","activate_playlist","active_playlist","active_playlist","add","add_assign","add_track","add_track","album","album_artist","art_url","artist","as_micros","as_millis","as_nanos","as_secs","as_str","as_str","as_str","async_trait","audio_bpm","auto_rating","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","builder","builder","builder","can_control","can_control","can_control","can_edit_tracks","can_edit_tracks","can_go_next","can_go_next","can_go_next","can_go_previous","can_go_previous","can_go_previous","can_pause","can_pause","can_pause","can_play","can_play","can_play","can_quit","can_quit","can_quit","can_raise","can_raise","can_raise","can_seek","can_seek","can_seek","can_set_fullscreen","can_set_fullscreen","can_set_fullscreen","checked_add","checked_sub","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","comment","composer","connect_next","connect_open_uri","connect_pause","connect_play","connect_play_pause","connect_previous","connect_quit","connect_raise","connect_seek","connect_set_fullscreen","connect_set_loop_status","connect_set_position","connect_set_rate","connect_set_shuffle","connect_set_volume","connect_stop","connection","connection","content_created","default","default","default","deref","deserialize","deserialize","deserialize","deserializer_for_signature","deserializer_for_signature","deserializer_for_signature","desktop_entry","desktop_entry","desktop_entry","disc_number","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","emit","emit","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","first_used","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_micros","from_millis","from_nanos","from_secs","fullscreen","fullscreen","fullscreen","genre","get","get_playlists","get_playlists","get_tracks_metadata","get_tracks_metadata","get_value","go_to","go_to","has_track_list","has_track_list","has_track_list","hash","hash","icon","id","identity","identity","identity","imp","imp","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_future","into_inner","is_negative","is_positive","is_zero","last_used","length","loop_status","loop_status","loop_status","lyricist","lyrics","maximum_rate","maximum_rate","maximum_rate","metadata","metadata","metadata","minimum_rate","minimum_rate","minimum_rate","name","new","new","new","new_with_all","new_with_all","new_with_playlists","new_with_playlists","new_with_track_list","new_with_track_list","next","next","null_value","null_value","null_value","open_uri","open_uri","orderings","orderings","partial_cmp","pause","pause","play","play","play_pause","play_pause","playback_status","playback_status","playback_status","playlist_count","playlist_count","playlists_emit","playlists_emit","playlists_properties_changed","playlists_properties_changed","poll","position","position","position","previous","previous","properties_changed","properties_changed","quit","quit","raise","raise","rate","rate","rate","remove_track","remove_track","run","run","saturating_add","saturating_sub","seek","seek","seeked","serialize","serialize","serialize","serialize","set","set_album","set_album_artist","set_art_url","set_artist","set_audio_bpm","set_auto_rating","set_can_go_next","set_can_go_previous","set_can_pause","set_can_play","set_can_quit","set_can_raise","set_can_seek","set_can_set_fullscreen","set_comment","set_composer","set_content_created","set_desktop_entry","set_disc_number","set_first_used","set_fullscreen","set_fullscreen","set_fullscreen","set_genre","set_has_track_list","set_identity","set_last_used","set_length","set_loop_status","set_loop_status","set_loop_status","set_lyricist","set_lyrics","set_maximum_rate","set_metadata","set_minimum_rate","set_playback_status","set_position","set_position","set_position","set_rate","set_rate","set_rate","set_shuffle","set_shuffle","set_shuffle","set_supported_mime_types","set_supported_uri_schemes","set_title","set_track_number","set_trackid","set_url","set_use_count","set_user_rating","set_value","set_volume","set_volume","set_volume","shuffle","shuffle","shuffle","signature","signature","signature","signature","signature","signature","signature","stop","stop","sub","sub_assign","supported_mime_types","supported_mime_types","supported_mime_types","supported_uri_schemes","supported_uri_schemes","supported_uri_schemes","title","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","track_list_emit","track_list_emit","track_list_properties_changed","track_list_properties_changed","track_number","trackid","tracks","tracks","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","url","use_count","user_rating","volume","volume","volume","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","zbus","playlist","position","after_track","current_track","metadata","metadata","track_id","track_id","tracks","MetadataBuilder","PlayerBuilder","album","album_artist","art_url","artist","audio_bpm","auto_rating","borrow","borrow","borrow_mut","borrow_mut","build","build","can_control","can_go_next","can_go_previous","can_pause","can_play","can_quit","can_raise","can_seek","can_set_fullscreen","clone","clone_into","comment","composer","content_created","default","desktop_entry","disc_number","first_used","fmt","fmt","from","from","fullscreen","genre","has_track_list","identity","into","into","last_used","length","loop_status","lyricist","lyrics","maximum_rate","metadata","minimum_rate","null_value","other","playback_status","position","rate","shuffle","supported_mime_types","supported_uri_schemes","title","to_owned","track_number","trackid","try_from","try_from","try_into","try_into","type_id","type_id","url","use_count","user_rating","volume","vzip","vzip"],"q":[[0,"mpris_server"],[595,"mpris_server::PlaylistsSignal"],[596,"mpris_server::Signal"],[597,"mpris_server::TrackListSignal"],[604,"mpris_server::builder"],[678,"core::future::future"],[679,"alloc::boxed"],[680,"core::pin"],[681,"core::option"],[682,"alloc::string"],[683,"alloc::vec"],[684,"core::cmp"],[685,"core::ops::function"],[686,"zbus::connection"],[687,"core::result"],[688,"serde::de"],[689,"zvariant::error"],[690,"zvariant::signature"],[691,"core::convert"],[692,"core::cell"],[693,"zbus::error"],[694,"core::fmt"],[695,"core::fmt"],[696,"zvariant::error"],[697,"core::hash"],[698,"core::iter::traits::collect"],[699,"core::task::wake"],[700,"core::task::poll"],[701,"serde::ser"],[702,"core::convert"]],"d":["","Alphabetical ordering by name, ascending.","","","","","","","","","","Ordering by creation date, oldest first.","Combined date and time.","","","","","Ordering by date of last playback, oldest first.","Local version of PlayerInterface to be used with …","Local version of PlaylistsInterface to be used with …","Local version of RootInterface to be used with LocalServer.","Local version of Server that doesn’t require T to be Send…","A task that runs LocalServer’s event handler until the …","Local version of TrackListInterface to be used with …","A repeat / loop status.","","The maximum time.","The minimum time.","","A mapping from metadata attribute names to values.","","","Ordering by last modified date, oldest first.","A special track ID to indicate “no track”.","The playback will stop when there are no more tracks to …","","A track is currently paused.","A playback rate.","A playback state.","","Ready-to-use mutable service-side object that internally …","Used to implement org.mpris.MediaPlayer2.Player interface, …","A track is currently playing.","A data structure describing a playlist.","The playback loops through a list of tracks.","Indicates that either the Name or Icon attribute of a …","","Unique playlist identifier.","Specifies the ordering of returned playlists.","Used to implement org.mpris.MediaPlayer2.Playlists …","Used for emitting PropertiesChanged signals on …","Used for emitting signals on Server::playlists_emit and …","Used for emitting PropertiesChanged signals on …","","Used to implement org.mpris.MediaPlayer2 interface.","Indicates that the track position has changed in a way …","Thin wrapper around zbus::Connection that calls to T’s …","","Used for emitting signals on Server::emit and …","There is no track currently playing.","","","A time with microsecond precision which can be negative.","The current track will start again from the beginning once …","Indicates that a track has been added to the track list.","Unique track identifier.","Used to implement org.mpris.MediaPlayer2.TrackList …","Used for emitting PropertiesChanged signals on …","Indicates that the entire tracklist has been replaced.","Used for emitting signals on Server::track_list_emit and …","Indicates that the metadata of a track in the tracklist …","Indicates that a track has been removed from the track …","","A unique resource identifier.","A user-defined ordering.","Audio volume level.","","A time of zero.","Returns the time as an absolute (non-negative) value.","Starts playing the given playlist.","Starts playing the given playlist.","The currently-active playlist.","The currently-active playlist.","","","Adds a URI in the tracklist.","Adds a URI in the tracklist.","The album name.","The album artist(s).","The location of an image representing the track or album.","The track artist(s).","Returns the number of whole microseconds contained by this …","Returns the number of whole milliseconds contained by this …","Returns the number of whole nanoseconds contained by this …","Returns the number of whole seconds contained by this Time.","Returns the string representation of this loop status.","Returns the string representation of this playback status.","Returns the string representation of this playlist …","Retrofits support for async fn in trait impls and …","The speed of the music, in beats per minute.","An automatically-generated rating, based on things such as …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This contains the definitions of builder-pattern structs.","Creates a new builder-pattern struct instance to construct …","","Whether the media player may be controlled over this …","Whether the media player may be controlled over this …","This can only be set on construct.","Whether tracks can be added to and removed from the …","Whether tracks can be added to and removed from the …","Whether the client can call the Next method on this …","Whether the client can call the Next method on this …","","Whether the client can call the Previous method on this …","Whether the client can call the Previous method on this …","","Whether playback can be paused using Pause or PlayPause.","Whether playback can be paused using Pause or PlayPause.","","Whether playback can be started using Play or PlayPause.","Whether playback can be started using Play or PlayPause.","","Whether the player may be asked to quit.","Whether the player may be asked to quit.","","Whether the media player may be asked to be raised.","Whether the media player may be asked to be raised.","","Whether the client can control the playback position using …","Whether the client can control the playback position using …","","Whether the player may be asked to enter or leave …","Whether the player may be asked to enter or leave …","","Checked Time addition. Computes self + other, returning …","Checked Time subtraction. Computes self - other, returning …","","","","","","","","","","","","","","","","","","","","","","A (list of) freeform comment(s).","The composer(s) of the track.","","","","","","","","","","","","","","","","","Returns a reference to the inner Connection.","Returns a reference to the inner Connection.","When the track was created. Usually only the year component","","","","","","","","","","","The basename of an installed .desktop file which complies …","The basename of an installed .desktop file which complies …","","The disc number on the album that this track is from.","","","","","","","","Emits the given signal.","Emits the given signal.","","","","","","","","","","","When the track was first played.","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Whether the media player is occupying the fullscreen.","Whether the media player is occupying the fullscreen.","","The genre(s) of the track.","Returns the value corresponding to the key and convert it …","Gets a set of playlists.","Gets a set of playlists.","Gets all the metadata available for a set of tracks.","Gets all the metadata available for a set of tracks.","Returns a reference to the value corresponding to the key.","Skip to the specified TrackId.","Skip to the specified TrackId.","Indicates whether the /org/mpris/MediaPlayer2 object …","Indicates whether the /org/mpris/MediaPlayer2 object …","","","","The URI of an (optional) icon.","A unique identifier for the playlist.","A friendly name to identify the media player to users (eg: …","A friendly name to identify the media player to users (eg: …","","Returns a reference to the underlying implementation.","Returns a reference to the underlying implementation.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Returns the track ID as an ObjectPath.","Returns true if this Time is negative.","Returns true if this Time is positive.","Returns true if this Time is zero.","When the track was last played.","The duration of the track.","The current loop / repeat status","The current loop / repeat status","","The lyricist(s) of the track.","The track lyrics.","The maximum value which the Rate property can take. …","The maximum value which the Rate property can take. …","","The metadata of the current element.","The metadata of the current element.","","The minimum value which the Rate property can take. …","The minimum value which the Rate property can take. …","","The name of the playlist, typically given by the user.","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates an empty Metadata.","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Skips to the next track in the tracklist.","Skips to the next track in the tracklist.","","","","Opens the uri given as an argument","Opens the uri given as an argument","The available orderings. At least one must be offered.","The available orderings. At least one must be offered.","","Pauses playback.","Pauses playback.","Starts or resumes playback.","Starts or resumes playback.","Pauses playback.","Pauses playback.","The current playback status.","The current playback status.","","The number of playlists available.","The number of playlists available.","Emits the given signal on the Playlists interface.","Emits the given signal on the Playlists interface.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","","The current track position, between 0 and the mpris:length …","The current track position, between 0 and the mpris:length …","","Skips to the previous track in the tracklist.","Skips to the previous track in the tracklist.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","Causes the media player to stop running.","Causes the media player to stop running.","Brings the media player’s user interface to the front …","Brings the media player’s user interface to the front …","The current playback rate.","The current playback rate.","","Removes an item from the tracklist.","Removes an item from the tracklist.","Returns a task that run the server until the server and …","Returns a task that runs the player’s server until the …","Saturating Time addition. Computes self + other, returning …","Saturating Time subtraction. Computes self - other, …","Seeks forward in the current track by the specified offset …","Seeks forward in the current track by the specified offset …","","","","","","Sets the value for the given key and returns the previous …","Sets the album name.","Sets the album artist(s).","Sets the location of an image representing the track or …","Sets the track artist(s).","Sets the speed of the music, in beats per minute.","Sets an automatically-generated rating, based on things …","","","","","","","","","Sets a (list of) freeform comment(s).","Sets the composer(s) of the track.","Sets when the track was created. Usually only the year …","","Sets the disc number on the album that this track is from.","Sets when the track was first played.","Sets whether the media player is occupying the fullscreen.","Sets whether the media player is occupying the fullscreen.","","Sets the genre(s) of the track.","","","Sets when the track was last played.","Sets the duration of the track.","Sets the current loop / repeat status","Sets the current loop / repeat status","","Sets the lyricist(s) of the track.","Sets the track lyrics.","","","","","Sets the current track position.","Sets the current track position.","This does not emit PropertiesChanged signal.","Sets the current playback rate.","Sets the current playback rate.","","Sets whether playback is shuffled.","Sets whether playback is shuffled.","","","","Sets the track title.","Sets the track number on the album disc.","Sets a unique identity for this track within the context …","Sets the location of the media file.","Sets the number of times the track has been played.","Sets a user-specified rating. This should be in the range …","Sets the value for the given key and returns the previous …","Sets the volume level.","Sets the volume level.","","Whether playback is shuffled.","Whether playback is shuffled.","","","","","","","","","Stops playback.","Stops playback.","","","The mime-types supported by the media player.","The mime-types supported by the media player.","","The URI schemes supported by the media player.","The URI schemes supported by the media player.","","The track title.","","","","","","","","","","","","","","","Emits the given signal on the TrackList interface.","Emits the given signal on the TrackList interface.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","The track number on the album disc.","A unique identity for this track within the context of an …","An array which contains the identifier of each track in …","An array which contains the identifier of each track in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The location of the media file.","The number of times the track has been played.","A user-specified rating. This should be in the range 0.0 …","The volume level.","The volume level.","","","","","","","","","","","","","","","","","","","","The playlist which details have changed.","The new position.","The identifier of the track after which the new track was …","The identifier of the track to be considered as current.","The metadata of the newly added item.","The new track metadata.","The identifier of the track being removed.","The id of the track which metadata has changed.","The new content of the tracklist.","A builder used to create Metadata.","A builder used to create Player.","Sets the album name.","Sets the album artist(s).","Sets the location of an image representing the track or …","Sets the track artist(s).","Sets the speed of the music, in beats per minute.","Sets an automatically-generated rating, based on things …","","","","","Creates Metadata from the builder.","","","","","","","","","","","","","Sets a (list of) freeform comment(s).","Sets the composer(s) of the track.","Sets when the track was created. Usually only the year …","","","Sets the disc number on the album that this track is from.","Sets when the track was first played.","","","Returns the argument unchanged.","Returns the argument unchanged.","","Sets the genre(s) of the track.","","","Calls U::from(self).","Calls U::from(self).","Sets when the track was last played.","Sets the duration of the track.","","Sets the lyricist(s) of the track.","Sets the track lyrics.","","","","","Sets a value for the given key.","","","","","","","Sets the track title.","","Sets the track number on the album disc.","Sets a unique identity for this track within the context …","","","","","","","Sets the location of the media file.","Sets the number of times the track has been played.","Sets a user-specified rating. This should be in the range …","","",""],"i":[36,23,35,34,34,34,34,34,34,34,34,23,0,34,34,34,34,23,0,0,0,0,0,0,0,34,1,1,34,0,34,34,23,11,21,36,22,0,0,34,0,0,22,0,21,57,36,0,0,0,0,0,0,34,0,51,0,34,0,22,34,34,0,21,56,0,0,0,56,0,56,56,35,0,23,0,34,1,1,2,7,2,7,1,1,9,13,14,14,14,14,1,1,1,1,21,22,23,0,14,14,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,0,14,30,28,29,30,9,13,28,29,30,28,29,30,28,29,30,28,29,30,31,32,30,31,32,30,28,29,30,31,32,30,1,1,21,14,22,33,23,34,35,36,1,11,21,14,22,33,23,34,35,36,1,11,1,14,14,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,43,14,14,1,11,11,23,1,11,23,1,11,31,32,30,14,21,14,22,33,23,1,11,41,43,21,14,22,33,23,34,35,36,1,11,14,53,41,43,21,21,14,22,22,30,33,23,23,34,35,36,51,56,57,1,11,11,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,11,1,1,1,1,31,32,30,14,14,2,7,9,13,14,9,13,31,32,30,1,11,33,33,31,32,30,41,43,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,53,11,1,1,1,14,14,28,29,30,14,14,28,29,30,28,29,30,28,29,30,33,41,43,14,41,43,41,43,41,43,28,29,14,1,11,28,29,2,7,1,28,29,28,29,28,29,28,29,30,2,7,41,43,41,43,53,28,29,30,28,29,41,43,31,32,31,32,28,29,30,9,13,41,30,1,1,28,29,30,14,33,1,11,14,14,14,14,14,14,14,30,30,30,30,30,30,30,30,14,14,14,30,14,14,31,32,30,14,30,30,14,14,28,29,30,14,14,30,30,30,30,28,29,30,28,29,30,28,29,30,30,30,14,14,14,14,14,14,14,28,29,30,28,29,30,21,14,22,33,23,1,11,28,29,1,1,31,32,30,31,32,30,14,21,14,22,33,23,34,35,36,1,11,21,22,23,11,41,43,41,43,14,14,9,13,53,41,43,21,21,14,22,30,33,23,34,35,36,51,56,57,1,1,11,11,11,11,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,14,14,14,28,29,30,53,41,43,21,14,22,30,33,23,34,35,36,51,56,57,1,11,0,70,71,72,73,72,74,75,74,73,0,0,26,26,26,26,26,26,26,27,26,27,26,27,27,27,27,27,27,27,27,27,27,26,26,26,26,26,26,27,26,26,26,27,26,27,27,26,27,27,26,27,26,26,27,26,26,27,27,27,26,26,27,27,27,27,27,27,26,26,26,26,26,27,26,27,26,27,26,26,26,27,26,27],"f":"``````````````````````````````````````````````````````````````````````````````{bb}{{df}{{l{{j{h}}}}}}{{nf}{{l{{j{h}}}}}}{d{{l{{j{h}}}}}}{n{{l{{j{h}}}}}}{{bb}b}{{bb}A`}{{AbAdAfAh}{{l{{j{h}}}}}}{{AjAdAfAh}{{l{{j{h}}}}}}{Al{{B`{An}}}}{Al{{B`{{Bd{Bb}}}}}}{Al{{B`{Ad}}}}1{bBf}0{bBh}1{BjAn}{BlAn}{BnAn}`{Al{{B`{C`}}}}{Al{{B`{Cb}}}}{ce{}{}}000000000000000000000000000000000`{{}Cd}{AnCf}{Ch{{l{{j{h}}}}}}{Cj{{l{{j{h}}}}}}{ClAh}{Ab{{l{{j{h}}}}}}{Aj{{l{{j{h}}}}}}432432432432{Cn{{l{{j{h}}}}}}{D`{{l{{j{h}}}}}}4104654104{{bb}{{B`{b}}}}0{BjBj}{AlAl}{BlBl}{DbDb}{BnBn}{DdDd}{DfDf}{DhDh}{bb}{AfAf}{{ce}A`{}{}}000000000{{bb}Dj}{Al{{B`{{Bd{Bb}}}}}}0{{Clc}A`{{Dl{Cl}}}}{{Clc}A`{{Dl{ClAn}}}}111111{{Clc}A`{{Dl{Clb}}}}{{Clc}A`{{Dl{ClAh}}}}{{Clc}A`{{Dl{ClBj}}}}{{Clc}A`{{Dl{ClAfb}}}}{{Clc}A`{{Dl{ClDn}}}}3{{Clc}A`{{Dl{ClE`}}}}7{{{Eb{c}}}EdCj}{{{Ef{c}}}EdCh}{Al{{B`{Eh}}}}{{}Al}{{}b}{{}Af}{Afc{}}{c{{Ej{Bn}}}El}{c{{Ej{b}}}El}{c{{Ej{Af}}}El}{c{{Ej{En}}}{{Fb{F`}}}}00{Cn{{l{{j{h}}}}}}{D`{{l{{j{h}}}}}}{Cl{{Fd{Bb}}}}{Al{{B`{C`}}}}{cF`{}}000000{{{Eb{c}}Ff}{{Fh{A`}}}Cj}{{{Ef{c}}Ff}{{Fh{A`}}}Ch}{{BjBj}Ah}{{AlAl}Ah}{{BlBl}Ah}{{DbDb}Ah}{{BnBn}Ah}{{DdDd}Ah}{{DfDf}Ah}{{DhDh}Ah}{{bb}Ah}{{AfAf}Ah}{Al{{B`{Eh}}}}{{FjFl}Fn}{{{Eb{c}}Fl}Fn{}}{{{Ef{c}}Fl}Fn{}}{{BjFl}Fn}0{{AlFl}Fn}{{BlFl}Fn}0{{ClFl}Fn}{{DbFl}Fn}{{BnFl}Fn}0{{DdFl}Fn}{{DfFl}Fn}{{DhFl}Fn}{{FfFl}Fn}{{G`Fl}Fn}{{GbFl}Fn}{{bFl}Fn}{{AfFl}Fn}0{cc{}}0000000000000000{GdAf}{Bfb}000{Cn{{l{{j{h}}}}}}{D`{{l{{j{h}}}}}}{ClAh}{Al{{B`{{Bd{Bb}}}}}}{{AlAn}{{B`{{Gf{c}}}}}{}}{{dGhGhBnAh}{{l{{j{h}}}}}}{{nGhGhBnAh}{{l{{j{h}}}}}}{{Ab{Bd{Af}}}{{l{{j{h}}}}}}{{Aj{Bd{Af}}}{{l{{j{h}}}}}}{{AlAn}{{B`{Gj}}}}{{AbAf}{{l{{j{h}}}}}}{{AjAf}{{l{{j{h}}}}}};:9{{bc}A`Gl}{{Afc}A`Gl}``=<{Cl{{Fd{Bb}}}}{{{Eb{c}}}cCj}{{{Ef{c}}}cCh}{ce{}{}}0000000000000000{c{}{}}{AfGd}{bAh}00{Al{{B`{Eh}}}}{Al{{B`{b}}}}{Ch{{l{{j{h}}}}}}{Cj{{l{{j{h}}}}}}{ClBj}{Al{{B`{{Bd{Bb}}}}}}{Al{{B`{An}}}}43{ClDn}54{Cl{{Fd{Al}}}}651`{{Anc}{{Fh{{Eb{c}}}}}Cj}{{Anc}{{Fh{{Ef{c}}}}}Ch}{{}Al}{{Anc}{{Fh{{Eb{c}}}}}{Ajn}}{{Anc}{{Fh{{Ef{c}}}}}{Abd}}{{Anc}{{Fh{{Eb{c}}}}}n}{{Anc}{{Fh{{Ef{c}}}}}d}{{Anc}{{Fh{{Eb{c}}}}}Aj}{{Anc}{{Fh{{Ef{c}}}}}Ab}?>{{}c{}}00{{ChBb}{{l{{j{h}}}}}}{{CjBb}{{l{{j{h}}}}}}{d{{l{{j{h}}}}}}{n{{l{{j{h}}}}}}{{bb}{{B`{Dj}}}}{Ch{{l{{j{h}}}}}}{Cj{{l{{j{h}}}}}}101010{ClBl}54{{{Eb{c}}Gb}{{Fh{A`}}}n}{{{Ef{c}}Gb}{{Fh{A`}}}d}{{{Eb{c}}e}{{Fh{A`}}}n{{H`{}{{Gn{Dh}}}}}}{{{Ef{c}}e}{{Fh{A`}}}d{{H`{}{{Gn{Dh}}}}}}{{{l{Fj}}Hb}{{Hd{c}}}{}}76{Clb}87{{{Eb{c}}e}{{Fh{A`}}}Cj{{H`{}{{Gn{Dd}}}}}}{{{Ef{c}}e}{{Fh{A`}}}Ch{{H`{}{{Gn{Dd}}}}}}{Cn{{l{{j{h}}}}}}{D`{{l{{j{h}}}}}}10<;{ClDn}{{AbAf}{{l{{j{h}}}}}}{{AjAf}{{l{{j{h}}}}}}{{{Eb{c}}}FjCj}{ClFj}{{bb}b}0{{Chb}{{l{{j{h}}}}}}{{Cjb}{{l{{j{h}}}}}}{{Clb}{{Fh{A`}}}}{{Alc}EjHf}{{Dbc}EjHf}{{bc}EjHf}{{Afc}EjHf}{{AlAn{B`{c}}}{{B`{Gj}}}{{Hh{Gj}}}}{{Al{B`{c}}}A`{{Hh{Bb}}}}{{Al{B`{e}}}A`{{Hh{Bb}}}{{H`{}{{Gn{c}}}}}}{{Al{B`{c}}}A`{{Hh{Ad}}}}1{{Al{B`{C`}}}A`}{{Al{B`{Cb}}}A`}{{ClAh}{{Fh{A`}}}}000000044{{Al{B`{c}}}A`{{Hh{Eh}}}}{{Clc}{{Fh{A`}}}{{Hh{Bb}}}}41{{CnAh}{{l{{j{h}}}}}}{{D`Ah}{{l{{j{h}}}}}}48423{{Al{B`{b}}}A`}{{ChBj}{{l{{j{h}}}}}}{{CjBj}{{l{{j{h}}}}}}{{ClBj}{{Fh{A`}}}}<={{ClDn}{{Fh{A`}}}}{{ClAl}{{Fh{A`}}}}1{{ClBl}{{Fh{A`}}}}{{ChAfb}{{l{{j{h}}}}}}{{CjAfb}{{l{{j{h}}}}}}{{Clb}A`}{{ChDn}{{l{{j{h}}}}}}{{CjDn}{{l{{j{h}}}}}}7{{ChAh}{{l{{j{h}}}}}}{{CjAh}{{l{{j{h}}}}}}{{ClAh}{{Fh{A`}}}}{{Cle}{{Fh{A`}}}{{Hh{Bb}}}{{H`{}{{Gn{c}}}}}}0{{Al{B`{c}}}A`{{Hh{Bb}}}}{{Al{B`{C`}}}A`}{{Al{B`{c}}}A`{{Hh{Af}}}}{{Al{B`{c}}}A`{{Hh{Ad}}}}2{{Al{B`{Cb}}}A`}{{AlAn{B`{Gj}}}{{B`{Gj}}}}{{ChE`}{{l{{j{h}}}}}}{{CjE`}{{l{{j{h}}}}}}{{ClE`}{{Fh{A`}}}}{Ch{{l{{j{h}}}}}}{Cj{{l{{j{h}}}}}}{ClAh}{{}F`}00000032{{bb}b}{{bb}A`}{Cn{{l{{j{h}}}}}}{D`{{l{{j{h}}}}}}{Cl{{Fd{{Bd{Bb}}}}}}210{Al{{B`{An}}}}{ce{}{}}000000000{cBb{}}000{{{Eb{c}}G`}{{Fh{A`}}}Aj}{{{Ef{c}}G`}{{Fh{A`}}}Ab}{{{Eb{c}}e}{{Fh{A`}}}Aj{{H`{}{{Gn{Df}}}}}}{{{Ef{c}}e}{{Fh{A`}}}Ab{{H`{}{{Gn{Df}}}}}}{Al{{B`{C`}}}}{Al{{B`{Af}}}}{Ab{{l{{j{h}}}}}}{Aj{{l{{j{h}}}}}}{c{{Ej{e}}}{}{}}000{Gj{{Ej{Bjc}}}{}}11111111111{Gj{{Ej{bc}}}{}}22{Gj{{Gf{Af}}}}{An{{Gf{Af}}}}{Bb{{Gf{Af}}}}55555555555555555{cHj{}}0000000000000000{Al{{B`{Ad}}}};{Al{{B`{Cb}}}}{Ch{{l{{j{h}}}}}}{Cj{{l{{j{h}}}}}}{ClE`}{ce{}{}}0000000000000000````````````{{Cdc}Cd{{Hh{Bb}}}}{{Cde}Cd{{Hh{Bb}}}{{H`{}{{Gn{c}}}}}}{{Cdc}Cd{{Hh{Ad}}}}1{{CdC`}Cd}{{CdCb}Cd}5555{CdAl}{Cf{{Fh{Cl}}}}{{CfAh}Cf}00000000{CdCd}{{ce}A`{}{}}88{{Cdc}Cd{{Hh{Eh}}}}{{}Cd}{{Cfc}Cf{{Hh{Bb}}}}92{{CdFl}Fn}{{CfFl}Fn}{cc{}}08>83{ce{}{}}06{{Cdb}Cd}{{CfBj}Cf}{{Cde}Cd{{Hh{Bb}}}{{H`{}{{Gn{c}}}}}}{{Cdc}Cd{{Hh{Bb}}}}{{CfDn}Cf}{{CfAl}Cf}1{{}c{}}{{CdAnc}Cd{{Hh{Gj}}}}{{CfBl}Cf}{{Cfb}Cf}5{{CfAh}Cf}{{Cfe}Cf{{Hh{Bb}}}{{H`{}{{Gn{c}}}}}}08<{{CdC`}Cd}{{Cdc}Cd{{Hh{Af}}}}{c{{Ej{e}}}{}{}}000{cHj{}}0{{Cdc}Cd{{Hh{Ad}}}}4{{CdCb}Cd}{{CfE`}Cf}{ce{}{}}0","c":[],"p":[[5,"Time",0],[10,"PlaylistsInterface",0],[8,"PlaylistId",0],[10,"Future",678],[5,"Box",679],[5,"Pin",680],[10,"LocalPlaylistsInterface",0],[1,"unit"],[10,"TrackListInterface",0],[8,"Uri",0],[5,"TrackId",0],[1,"bool"],[10,"LocalTrackListInterface",0],[5,"Metadata",0],[1,"str"],[6,"Option",681],[5,"String",682],[5,"Vec",683],[1,"i64"],[1,"i128"],[6,"LoopStatus",0],[6,"PlaybackStatus",0],[6,"PlaylistOrdering",0],[1,"i32"],[1,"f64"],[5,"MetadataBuilder",604],[5,"PlayerBuilder",604],[10,"PlayerInterface",0],[10,"LocalPlayerInterface",0],[5,"Player",0],[10,"RootInterface",0],[10,"LocalRootInterface",0],[5,"Playlist",0],[6,"Property",0],[6,"TrackListProperty",0],[6,"PlaylistsProperty",0],[6,"Ordering",684],[10,"Fn",685],[8,"PlaybackRate",0],[8,"Volume",0],[5,"LocalServer",0],[5,"Connection",686],[5,"Server",0],[8,"DateTime",0],[6,"Result",687],[10,"Deserializer",688],[6,"Error",689],[5,"Signature",690],[10,"TryInto",691],[5,"Ref",692],[6,"Signal",0],[8,"Result",693],[5,"LocalServerRunTask",0],[5,"Formatter",694],[8,"Result",694],[6,"TrackListSignal",0],[6,"PlaylistsSignal",0],[5,"ObjectPath",695],[8,"Result",689],[1,"u32"],[6,"Value",696],[10,"Hasher",697],[17,"Item"],[10,"IntoIterator",698],[5,"Context",699],[6,"Poll",700],[10,"Serializer",701],[10,"Into",691],[5,"TypeId",702],[15,"PlaylistChanged",595],[15,"Seeked",596],[15,"TrackAdded",597],[15,"TrackListReplaced",597],[15,"TrackMetadataChanged",597],[15,"TrackRemoved",597]],"b":[[248,"impl-Debug-for-LoopStatus"],[249,"impl-Display-for-LoopStatus"],[251,"impl-Debug-for-PlaybackStatus"],[252,"impl-Display-for-PlaybackStatus"],[255,"impl-Display-for-PlaylistOrdering"],[256,"impl-Debug-for-PlaylistOrdering"],[264,"impl-Debug-for-TrackId"],[265,"impl-Display-for-TrackId"],[534,"impl-TryFrom%3CValue%3C\'_%3E%3E-for-TrackId"],[535,"impl-TryFrom%3C%26str%3E-for-TrackId"],[536,"impl-TryFrom%3CString%3E-for-TrackId"]],"a":{"activateplaylist":[79,80],"activeplaylist":[81,82],"addtrack":[85,86],"cancontrol":[138,139],"canedittracks":[141,142],"cangonext":[143,144],"cangoprevious":[146,147],"canpause":[149,150],"canplay":[152,153],"canquit":[155,156],"canraise":[158,159],"canseek":[161,162],"cansetfullscreen":[164,165],"desktopentry":[221,222],"fullscreen":[288,289,434,435],"getplaylists":[293,294],"gettracksmetadata":[295,296],"goto":[298,299],"hastracklist":[300,301],"identity":[307,308],"loop_status":[24],"loopstatus":[336,337,442,443],"maximumrate":[341,342],"metadata":[344,345],"metadata_map":[29],"minimumrate":[347,348],"next":[360,361],"openuri":[365,366],"orderings":[367,368],"org.mpris.mediaplayer2.player":[18,41],"org.mpris.mediaplayer2.playlists":[19,49],"org.mpris.mediaplayer2.tracklist":[23,66],"pause":[370,371],"play":[372,373],"playback_rate":[37],"playback_status":[38],"playbackstatus":[376,377],"playlist_id":[47],"playlist_ordering":[48],"playlistcount":[379,380],"playpause":[374,375],"position":[386,387],"previous":[389,390],"quit":[393,394],"raise":[395,396],"rate":[397,398,454,455],"removetrack":[400,401],"seek":[406,407],"setposition":[451,452],"shuffle":[457,458,472,473],"stop":[482,483],"supportedmimetypes":[486,487],"supportedurischemes":[489,490],"time_in_us":[62],"track_id":[65],"tracks":[513,514],"volume":[469,470,574,575]}}]\ +["mpris_server",{"doc":"MPRIS Server","t":"PPPPPPPPPPPPIPPPPPKKKFFKGPTTPFPPPTPPPIGPFKPFPPPIGKGGGPKPFPGPPPFPPFKGPGPPPIPIPTNMMMMNNMMNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNMMNMMMMNMMNMMNMMNMMNMMNMMNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNMMMMNMMMMNNNOOMMNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNMMNMMNMMNONNNNNNNNNMMNNNMMMMNMMMMMMMMNMMNNNNNMMNMMNNMMMMMMNMMNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNMMNNNNNNNMMNMMNMMNNNNNNNNNNMMNMMNNNNNNNNMMNNMMNMMNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNEOOOOOOOOOFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["ActivePlaylist","Alphabetical","CanEditTracks","CanGoNext","CanGoPrevious","CanPause","CanPlay","CanQuit","CanRaise","CanSeek","CanSetFullscreen","CreationDate","DateTime","DesktopEntry","Fullscreen","HasTrackList","Identity","LastPlayDate","LocalPlayerInterface","LocalPlaylistsInterface","LocalRootInterface","LocalServer","LocalServerRunTask","LocalTrackListInterface","LoopStatus","LoopStatus","MAX","MIN","MaximumRate","Metadata","Metadata","MinimumRate","ModifiedDate","NO_TRACK","None","Orderings","Paused","PlaybackRate","PlaybackStatus","PlaybackStatus","Player","PlayerInterface","Playing","Playlist","Playlist","PlaylistChanged","PlaylistCount","PlaylistId","PlaylistOrdering","PlaylistsInterface","PlaylistsProperty","PlaylistsSignal","Property","Rate","RootInterface","Seeked","Server","Shuffle","Signal","Stopped","SupportedMimeTypes","SupportedUriSchemes","Time","Track","TrackAdded","TrackId","TrackListInterface","TrackListProperty","TrackListReplaced","TrackListSignal","TrackMetadataChanged","TrackRemoved","Tracks","Uri","UserDefined","Volume","Volume","ZERO","abs","activate_playlist","activate_playlist","active_playlist","active_playlist","add","add_assign","add_track","add_track","album","album_artist","alignment","art_url","artist","as_micros","as_millis","as_nanos","as_secs","as_str","as_str","as_str","async_trait","audio_bpm","auto_rating","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","builder","builder","builder","can_control","can_control","can_control","can_edit_tracks","can_edit_tracks","can_go_next","can_go_next","can_go_next","can_go_previous","can_go_previous","can_go_previous","can_pause","can_pause","can_pause","can_play","can_play","can_play","can_quit","can_quit","can_quit","can_raise","can_raise","can_raise","can_seek","can_seek","can_seek","can_set_fullscreen","can_set_fullscreen","can_set_fullscreen","checked_add","checked_sub","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","comment","composer","connect_next","connect_open_uri","connect_pause","connect_play","connect_play_pause","connect_previous","connect_quit","connect_raise","connect_seek","connect_set_fullscreen","connect_set_loop_status","connect_set_position","connect_set_rate","connect_set_shuffle","connect_set_volume","connect_stop","connection","connection","content_created","default","default","default","deref","deserialize","deserialize","deserialize","deserializer_for_signature","deserializer_for_signature","deserializer_for_signature","desktop_entry","desktop_entry","desktop_entry","disc_number","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","dynamic_signature","emit","emit","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","first_used","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_micros","from_millis","from_nanos","from_secs","fullscreen","fullscreen","fullscreen","genre","get","get_playlists","get_playlists","get_tracks_metadata","get_tracks_metadata","get_value","go_to","go_to","has_track_list","has_track_list","has_track_list","hash","hash","icon","id","identity","identity","identity","imp","imp","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_future","into_inner","is_negative","is_positive","is_zero","last_used","length","loop_status","loop_status","loop_status","lyricist","lyrics","maximum_rate","maximum_rate","maximum_rate","metadata","metadata","metadata","minimum_rate","minimum_rate","minimum_rate","name","new","new","new","new_with_all","new_with_all","new_with_playlists","new_with_playlists","new_with_track_list","new_with_track_list","next","next","null_value","null_value","null_value","open_uri","open_uri","orderings","orderings","partial_cmp","pause","pause","play","play","play_pause","play_pause","playback_status","playback_status","playback_status","playlist_count","playlist_count","playlists_emit","playlists_emit","playlists_properties_changed","playlists_properties_changed","poll","position","position","position","previous","previous","properties_changed","properties_changed","quit","quit","raise","raise","rate","rate","rate","remove_track","remove_track","run","run","saturating_add","saturating_sub","seek","seek","seeked","serialize","serialize","serialize","serialize","set","set_album","set_album_artist","set_art_url","set_artist","set_audio_bpm","set_auto_rating","set_can_go_next","set_can_go_previous","set_can_pause","set_can_play","set_can_quit","set_can_raise","set_can_seek","set_can_set_fullscreen","set_comment","set_composer","set_content_created","set_desktop_entry","set_disc_number","set_first_used","set_fullscreen","set_fullscreen","set_fullscreen","set_genre","set_has_track_list","set_identity","set_last_used","set_length","set_loop_status","set_loop_status","set_loop_status","set_lyricist","set_lyrics","set_maximum_rate","set_metadata","set_minimum_rate","set_playback_status","set_position","set_position","set_position","set_rate","set_rate","set_rate","set_shuffle","set_shuffle","set_shuffle","set_supported_mime_types","set_supported_uri_schemes","set_title","set_track_number","set_trackid","set_url","set_use_count","set_user_rating","set_value","set_volume","set_volume","set_volume","shuffle","shuffle","shuffle","signature","signature","signature","signature","signature","signature","signature","stop","stop","sub","sub_assign","supported_mime_types","supported_mime_types","supported_mime_types","supported_uri_schemes","supported_uri_schemes","supported_uri_schemes","title","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","track_list_emit","track_list_emit","track_list_properties_changed","track_list_properties_changed","track_number","trackid","tracks","tracks","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","url","use_count","user_rating","volume","volume","volume","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","zbus","playlist","position","after_track","current_track","metadata","metadata","track_id","track_id","tracks","MetadataBuilder","PlayerBuilder","album","album_artist","art_url","artist","audio_bpm","auto_rating","borrow","borrow","borrow_mut","borrow_mut","build","build","can_control","can_go_next","can_go_previous","can_pause","can_play","can_quit","can_raise","can_seek","can_set_fullscreen","clone","clone_into","comment","composer","content_created","default","desktop_entry","disc_number","first_used","fmt","fmt","from","from","fullscreen","genre","has_track_list","identity","into","into","last_used","length","loop_status","lyricist","lyrics","maximum_rate","metadata","minimum_rate","null_value","other","playback_status","position","rate","shuffle","supported_mime_types","supported_uri_schemes","title","to_owned","track_number","trackid","try_from","try_from","try_into","try_into","type_id","type_id","url","use_count","user_rating","volume","vzip","vzip"],"q":[[0,"mpris_server"],[596,"mpris_server::PlaylistsSignal"],[597,"mpris_server::Signal"],[598,"mpris_server::TrackListSignal"],[605,"mpris_server::builder"],[679,"core::future::future"],[680,"alloc::boxed"],[681,"core::pin"],[682,"core::option"],[683,"alloc::string"],[684,"alloc::vec"],[685,"zvariant::serialized::format"],[686,"core::cmp"],[687,"core::ops::function"],[688,"zbus::connection"],[689,"core::result"],[690,"serde::de"],[691,"zvariant::error"],[692,"zvariant::signature"],[693,"core::convert"],[694,"core::cell"],[695,"zbus::error"],[696,"core::fmt"],[697,"core::fmt"],[698,"zvariant::error"],[699,"core::hash"],[700,"core::iter::traits::collect"],[701,"core::task::wake"],[702,"core::task::poll"],[703,"serde::ser"],[704,"core::convert"]],"d":["","Alphabetical ordering by name, ascending.","","","","","","","","","","Ordering by creation date, oldest first.","Combined date and time.","","","","","Ordering by date of last playback, oldest first.","Local version of PlayerInterface to be used with …","Local version of PlaylistsInterface to be used with …","Local version of RootInterface to be used with LocalServer.","Local version of Server that doesn’t require T to be Send…","A task that runs LocalServer’s event handler until the …","Local version of TrackListInterface to be used with …","A repeat / loop status.","","The maximum time.","The minimum time.","","A mapping from metadata attribute names to values.","","","Ordering by last modified date, oldest first.","A special track ID to indicate “no track”.","The playback will stop when there are no more tracks to …","","A track is currently paused.","A playback rate.","A playback state.","","Ready-to-use mutable service-side object that internally …","Used to implement org.mpris.MediaPlayer2.Player interface, …","A track is currently playing.","A data structure describing a playlist.","The playback loops through a list of tracks.","Indicates that either the Name or Icon attribute of a …","","Unique playlist identifier.","Specifies the ordering of returned playlists.","Used to implement org.mpris.MediaPlayer2.Playlists …","Used for emitting PropertiesChanged signals on …","Used for emitting signals on Server::playlists_emit and …","Used for emitting PropertiesChanged signals on …","","Used to implement org.mpris.MediaPlayer2 interface.","Indicates that the track position has changed in a way …","Thin wrapper around zbus::Connection that calls to T’s …","","Used for emitting signals on Server::emit and …","There is no track currently playing.","","","A time with microsecond precision which can be negative.","The current track will start again from the beginning once …","Indicates that a track has been added to the track list.","Unique track identifier.","Used to implement org.mpris.MediaPlayer2.TrackList …","Used for emitting PropertiesChanged signals on …","Indicates that the entire tracklist has been replaced.","Used for emitting signals on Server::track_list_emit and …","Indicates that the metadata of a track in the tracklist …","Indicates that a track has been removed from the track …","","A unique resource identifier.","A user-defined ordering.","Audio volume level.","","A time of zero.","Returns the time as an absolute (non-negative) value.","Starts playing the given playlist.","Starts playing the given playlist.","The currently-active playlist.","The currently-active playlist.","","","Adds a URI in the tracklist.","Adds a URI in the tracklist.","The album name.","The album artist(s).","","The location of an image representing the track or album.","The track artist(s).","Returns the number of whole microseconds contained by this …","Returns the number of whole milliseconds contained by this …","Returns the number of whole nanoseconds contained by this …","Returns the number of whole seconds contained by this Time.","Returns the string representation of this loop status.","Returns the string representation of this playback status.","Returns the string representation of this playlist …","Retrofits support for async fn in trait impls and …","The speed of the music, in beats per minute.","An automatically-generated rating, based on things such as …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This contains the definitions of builder-pattern structs.","Creates a new builder-pattern struct instance to construct …","","Whether the media player may be controlled over this …","Whether the media player may be controlled over this …","This can only be set on construct.","Whether tracks can be added to and removed from the …","Whether tracks can be added to and removed from the …","Whether the client can call the Next method on this …","Whether the client can call the Next method on this …","","Whether the client can call the Previous method on this …","Whether the client can call the Previous method on this …","","Whether playback can be paused using Pause or PlayPause.","Whether playback can be paused using Pause or PlayPause.","","Whether playback can be started using Play or PlayPause.","Whether playback can be started using Play or PlayPause.","","Whether the player may be asked to quit.","Whether the player may be asked to quit.","","Whether the media player may be asked to be raised.","Whether the media player may be asked to be raised.","","Whether the client can control the playback position using …","Whether the client can control the playback position using …","","Whether the player may be asked to enter or leave …","Whether the player may be asked to enter or leave …","","Checked Time addition. Computes self + other, returning …","Checked Time subtraction. Computes self - other, returning …","","","","","","","","","","","","","","","","","","","","","","A (list of) freeform comment(s).","The composer(s) of the track.","","","","","","","","","","","","","","","","","Returns a reference to the inner Connection.","Returns a reference to the inner Connection.","When the track was created. Usually only the year component","","","","","","","","","","","The basename of an installed .desktop file which complies …","The basename of an installed .desktop file which complies …","","The disc number on the album that this track is from.","","","","","","","","Emits the given signal.","Emits the given signal.","","","","","","","","","","","When the track was first played.","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Creates a new Time from the specified number of whole …","Whether the media player is occupying the fullscreen.","Whether the media player is occupying the fullscreen.","","The genre(s) of the track.","Returns the value corresponding to the key and convert it …","Gets a set of playlists.","Gets a set of playlists.","Gets all the metadata available for a set of tracks.","Gets all the metadata available for a set of tracks.","Returns a reference to the value corresponding to the key.","Skip to the specified TrackId.","Skip to the specified TrackId.","Indicates whether the /org/mpris/MediaPlayer2 object …","Indicates whether the /org/mpris/MediaPlayer2 object …","","","","The URI of an (optional) icon.","A unique identifier for the playlist.","A friendly name to identify the media player to users (eg: …","A friendly name to identify the media player to users (eg: …","","Returns a reference to the underlying implementation.","Returns a reference to the underlying implementation.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Returns the track ID as an ObjectPath.","Returns true if this Time is negative.","Returns true if this Time is positive.","Returns true if this Time is zero.","When the track was last played.","The duration of the track.","The current loop / repeat status","The current loop / repeat status","","The lyricist(s) of the track.","The track lyrics.","The maximum value which the Rate property can take. …","The maximum value which the Rate property can take. …","","The metadata of the current element.","The metadata of the current element.","","The minimum value which the Rate property can take. …","The minimum value which the Rate property can take. …","","The name of the playlist, typically given by the user.","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates an empty Metadata.","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Creates a new LocalServer with the given bus name suffix …","Creates a new Server with the given bus name suffix and …","Skips to the next track in the tracklist.","Skips to the next track in the tracklist.","","","","Opens the uri given as an argument","Opens the uri given as an argument","The available orderings. At least one must be offered.","The available orderings. At least one must be offered.","","Pauses playback.","Pauses playback.","Starts or resumes playback.","Starts or resumes playback.","Pauses playback.","Pauses playback.","The current playback status.","The current playback status.","","The number of playlists available.","The number of playlists available.","Emits the given signal on the Playlists interface.","Emits the given signal on the Playlists interface.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","","The current track position, between 0 and the mpris:length …","The current track position, between 0 and the mpris:length …","","Skips to the previous track in the tracklist.","Skips to the previous track in the tracklist.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","Causes the media player to stop running.","Causes the media player to stop running.","Brings the media player’s user interface to the front …","Brings the media player’s user interface to the front …","The current playback rate.","The current playback rate.","","Removes an item from the tracklist.","Removes an item from the tracklist.","Returns a task that run the server until the server and …","Returns a task that runs the player’s server until the …","Saturating Time addition. Computes self + other, returning …","Saturating Time subtraction. Computes self - other, …","Seeks forward in the current track by the specified offset …","Seeks forward in the current track by the specified offset …","","","","","","Sets the value for the given key and returns the previous …","Sets the album name.","Sets the album artist(s).","Sets the location of an image representing the track or …","Sets the track artist(s).","Sets the speed of the music, in beats per minute.","Sets an automatically-generated rating, based on things …","","","","","","","","","Sets a (list of) freeform comment(s).","Sets the composer(s) of the track.","Sets when the track was created. Usually only the year …","","Sets the disc number on the album that this track is from.","Sets when the track was first played.","Sets whether the media player is occupying the fullscreen.","Sets whether the media player is occupying the fullscreen.","","Sets the genre(s) of the track.","","","Sets when the track was last played.","Sets the duration of the track.","Sets the current loop / repeat status","Sets the current loop / repeat status","","Sets the lyricist(s) of the track.","Sets the track lyrics.","","","","","Sets the current track position.","Sets the current track position.","This does not emit PropertiesChanged signal.","Sets the current playback rate.","Sets the current playback rate.","","Sets whether playback is shuffled.","Sets whether playback is shuffled.","","","","Sets the track title.","Sets the track number on the album disc.","Sets a unique identity for this track within the context …","Sets the location of the media file.","Sets the number of times the track has been played.","Sets a user-specified rating. This should be in the range …","Sets the value for the given key and returns the previous …","Sets the volume level.","Sets the volume level.","","Whether playback is shuffled.","Whether playback is shuffled.","","","","","","","","","Stops playback.","Stops playback.","","","The mime-types supported by the media player.","The mime-types supported by the media player.","","The URI schemes supported by the media player.","The URI schemes supported by the media player.","","The track title.","","","","","","","","","","","","","","","Emits the given signal on the TrackList interface.","Emits the given signal on the TrackList interface.","Emits the PropertiesChanged signal for the given …","Emits the PropertiesChanged signal for the given …","The track number on the album disc.","A unique identity for this track within the context of an …","An array which contains the identifier of each track in …","An array which contains the identifier of each track in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The location of the media file.","The number of times the track has been played.","A user-specified rating. This should be in the range 0.0 …","The volume level.","The volume level.","","","","","","","","","","","","","","","","","","","","The playlist which details have changed.","The new position.","The identifier of the track after which the new track was …","The identifier of the track to be considered as current.","The metadata of the newly added item.","The new track metadata.","The identifier of the track being removed.","The id of the track which metadata has changed.","The new content of the tracklist.","A builder used to create Metadata.","A builder used to create Player.","Sets the album name.","Sets the album artist(s).","Sets the location of an image representing the track or …","Sets the track artist(s).","Sets the speed of the music, in beats per minute.","Sets an automatically-generated rating, based on things …","","","","","Creates Metadata from the builder.","","","","","","","","","","","","","Sets a (list of) freeform comment(s).","Sets the composer(s) of the track.","Sets when the track was created. Usually only the year …","","","Sets the disc number on the album that this track is from.","Sets when the track was first played.","","","Returns the argument unchanged.","Returns the argument unchanged.","","Sets the genre(s) of the track.","","","Calls U::from(self).","Calls U::from(self).","Sets when the track was last played.","Sets the duration of the track.","","Sets the lyricist(s) of the track.","Sets the track lyrics.","","","","","Sets a value for the given key.","","","","","","","Sets the track title.","","Sets the track number on the album disc.","Sets a unique identity for this track within the context …","","","","","","","Sets the location of the media file.","Sets the number of times the track has been played.","Sets a user-specified rating. This should be in the range …","","",""],"i":[38,25,37,36,36,36,36,36,36,36,36,25,0,36,36,36,36,25,0,0,0,0,0,0,0,36,1,1,36,0,36,36,25,11,23,38,24,0,0,36,0,0,24,0,23,59,38,0,0,0,0,0,0,36,0,53,0,36,0,24,36,36,0,23,58,0,0,0,58,0,58,58,37,0,25,0,36,1,1,2,7,2,7,1,1,9,13,14,14,11,14,14,1,1,1,1,23,24,25,0,14,14,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,0,14,32,30,31,32,9,13,30,31,32,30,31,32,30,31,32,30,31,32,33,34,32,33,34,32,30,31,32,33,34,32,1,1,23,14,24,35,25,36,37,38,1,11,23,14,24,35,25,36,37,38,1,11,1,14,14,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,45,14,14,1,11,11,25,1,11,25,1,11,33,34,32,14,23,14,24,35,25,1,11,43,45,23,14,24,35,25,36,37,38,1,11,14,55,43,45,23,23,14,24,24,32,35,25,25,36,37,38,53,58,59,1,11,11,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,11,1,1,1,1,33,34,32,14,14,2,7,9,13,14,9,13,33,34,32,1,11,35,35,33,34,32,43,45,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,55,11,1,1,1,14,14,30,31,32,14,14,30,31,32,30,31,32,30,31,32,35,43,45,14,43,45,43,45,43,45,30,31,14,1,11,30,31,2,7,1,30,31,30,31,30,31,30,31,32,2,7,43,45,43,45,55,30,31,32,30,31,43,45,33,34,33,34,30,31,32,9,13,43,32,1,1,30,31,32,14,35,1,11,14,14,14,14,14,14,14,32,32,32,32,32,32,32,32,14,14,14,32,14,14,33,34,32,14,32,32,14,14,30,31,32,14,14,32,32,32,32,30,31,32,30,31,32,30,31,32,32,32,14,14,14,14,14,14,14,30,31,32,30,31,32,23,14,24,35,25,1,11,30,31,1,1,33,34,32,33,34,32,14,23,14,24,35,25,36,37,38,1,11,23,24,25,11,43,45,43,45,14,14,9,13,55,43,45,23,23,14,24,32,35,25,36,37,38,53,58,59,1,1,11,11,11,11,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,14,14,14,30,31,32,55,43,45,23,14,24,32,35,25,36,37,38,53,58,59,1,11,0,72,73,74,75,74,76,77,76,75,0,0,28,28,28,28,28,28,28,29,28,29,28,29,29,29,29,29,29,29,29,29,29,28,28,28,28,28,28,29,28,28,28,29,28,29,29,28,29,29,28,29,28,28,29,28,28,29,29,29,28,28,29,29,29,29,29,29,28,28,28,28,28,29,28,29,28,29,28,28,28,29,28,29],"f":"``````````````````````````````````````````````````````````````````````````````{bb}{{df}{{l{{j{h}}}}}}{{nf}{{l{{j{h}}}}}}{d{{l{{j{h}}}}}}{n{{l{{j{h}}}}}}{{bb}b}{{bb}A`}{{AbAdAfAh}{{l{{j{h}}}}}}{{AjAdAfAh}{{l{{j{h}}}}}}{Al{{B`{An}}}}{Al{{B`{{Bd{Bb}}}}}}{BfBh}{Al{{B`{Ad}}}}2{bBj}0{bBl}1{BnAn}{C`An}{CbAn}`{Al{{B`{Cd}}}}{Al{{B`{Cf}}}}{ce{}{}}000000000000000000000000000000000`{{}Ch}{AnCj}{Cl{{l{{j{h}}}}}}{Cn{{l{{j{h}}}}}}{D`Ah}{Ab{{l{{j{h}}}}}}{Aj{{l{{j{h}}}}}}432432432432{Db{{l{{j{h}}}}}}{Dd{{l{{j{h}}}}}}4104654104{{bb}{{B`{b}}}}0{BnBn}{AlAl}{C`C`}{DfDf}{CbCb}{DhDh}{DjDj}{DlDl}{bb}{AfAf}{{ce}A`{}{}}000000000{{bb}Dn}{Al{{B`{{Bd{Bb}}}}}}0{{D`c}A`{{E`{D`}}}}{{D`c}A`{{E`{D`An}}}}111111{{D`c}A`{{E`{D`b}}}}{{D`c}A`{{E`{D`Ah}}}}{{D`c}A`{{E`{D`Bn}}}}{{D`c}A`{{E`{D`Afb}}}}{{D`c}A`{{E`{D`Eb}}}}3{{D`c}A`{{E`{D`Ed}}}}7{{{Ef{c}}}EhCn}{{{Ej{c}}}EhCl}{Al{{B`{El}}}}{{}Al}{{}b}{{}Af}{Afc{}}{c{{En{Cb}}}F`}{c{{En{b}}}F`}{c{{En{Af}}}F`}{c{{En{Fb}}}{{Ff{Fd}}}}00{Db{{l{{j{h}}}}}}{Dd{{l{{j{h}}}}}}{D`{{Fh{Bb}}}}{Al{{B`{Cd}}}}{cFd{}}000000{{{Ef{c}}Fj}{{Fl{A`}}}Cn}{{{Ej{c}}Fj}{{Fl{A`}}}Cl}{{BnBn}Ah}{{AlAl}Ah}{{C`C`}Ah}{{DfDf}Ah}{{CbCb}Ah}{{DhDh}Ah}{{DjDj}Ah}{{DlDl}Ah}{{bb}Ah}{{AfAf}Ah}{Al{{B`{El}}}}{{FnG`}Gb}{{{Ef{c}}G`}Gb{}}{{{Ej{c}}G`}Gb{}}{{BnG`}Gb}0{{AlG`}Gb}{{C`G`}Gb}0{{D`G`}Gb}{{DfG`}Gb}{{CbG`}Gb}0{{DhG`}Gb}{{DjG`}Gb}{{DlG`}Gb}{{FjG`}Gb}{{GdG`}Gb}{{GfG`}Gb}{{bG`}Gb}{{AfG`}Gb}0{cc{}}000000000000000{GhAf}1{Bjb}000{Db{{l{{j{h}}}}}}{Dd{{l{{j{h}}}}}}{D`Ah}{Al{{B`{{Bd{Bb}}}}}}{{AlAn}{{B`{{Gj{c}}}}}{}}{{dGlGlCbAh}{{l{{j{h}}}}}}{{nGlGlCbAh}{{l{{j{h}}}}}}{{Ab{Bd{Af}}}{{l{{j{h}}}}}}{{Aj{Bd{Af}}}{{l{{j{h}}}}}}{{AlAn}{{B`{Gn}}}}{{AbAf}{{l{{j{h}}}}}}{{AjAf}{{l{{j{h}}}}}};:9{{bc}A`H`}{{Afc}A`H`}``=<{D`{{Fh{Bb}}}}{{{Ef{c}}}cCn}{{{Ej{c}}}cCl}{ce{}{}}0000000000000000{c{}{}}{AfGh}{bAh}00{Al{{B`{El}}}}{Al{{B`{b}}}}{Cl{{l{{j{h}}}}}}{Cn{{l{{j{h}}}}}}{D`Bn}{Al{{B`{{Bd{Bb}}}}}}{Al{{B`{An}}}}43{D`Eb}54{D`{{Fh{Al}}}}651`{{Anc}{{Fl{{Ef{c}}}}}Cn}{{Anc}{{Fl{{Ej{c}}}}}Cl}{{}Al}{{Anc}{{Fl{{Ef{c}}}}}{Ajn}}{{Anc}{{Fl{{Ej{c}}}}}{Abd}}{{Anc}{{Fl{{Ef{c}}}}}n}{{Anc}{{Fl{{Ej{c}}}}}d}{{Anc}{{Fl{{Ef{c}}}}}Aj}{{Anc}{{Fl{{Ej{c}}}}}Ab}?>{{}c{}}00{{ClBb}{{l{{j{h}}}}}}{{CnBb}{{l{{j{h}}}}}}{d{{l{{j{h}}}}}}{n{{l{{j{h}}}}}}{{bb}{{B`{Dn}}}}{Cl{{l{{j{h}}}}}}{Cn{{l{{j{h}}}}}}101010{D`C`}54{{{Ef{c}}Gf}{{Fl{A`}}}n}{{{Ej{c}}Gf}{{Fl{A`}}}d}{{{Ef{c}}e}{{Fl{A`}}}n{{Hd{}{{Hb{Dl}}}}}}{{{Ej{c}}e}{{Fl{A`}}}d{{Hd{}{{Hb{Dl}}}}}}{{{l{Fn}}Hf}{{Hh{c}}}{}}76{D`b}87{{{Ef{c}}e}{{Fl{A`}}}Cn{{Hd{}{{Hb{Dh}}}}}}{{{Ej{c}}e}{{Fl{A`}}}Cl{{Hd{}{{Hb{Dh}}}}}}{Db{{l{{j{h}}}}}}{Dd{{l{{j{h}}}}}}10<;{D`Eb}{{AbAf}{{l{{j{h}}}}}}{{AjAf}{{l{{j{h}}}}}}{{{Ef{c}}}FnCn}{D`Fn}{{bb}b}0{{Clb}{{l{{j{h}}}}}}{{Cnb}{{l{{j{h}}}}}}{{D`b}{{Fl{A`}}}}{{Alc}EnHj}{{Dfc}EnHj}{{bc}EnHj}{{Afc}EnHj}{{AlAn{B`{c}}}{{B`{Gn}}}{{Hl{Gn}}}}{{Al{B`{c}}}A`{{Hl{Bb}}}}{{Al{B`{e}}}A`{{Hl{Bb}}}{{Hd{}{{Hb{c}}}}}}{{Al{B`{c}}}A`{{Hl{Ad}}}}1{{Al{B`{Cd}}}A`}{{Al{B`{Cf}}}A`}{{D`Ah}{{Fl{A`}}}}000000044{{Al{B`{c}}}A`{{Hl{El}}}}{{D`c}{{Fl{A`}}}{{Hl{Bb}}}}41{{DbAh}{{l{{j{h}}}}}}{{DdAh}{{l{{j{h}}}}}}48423{{Al{B`{b}}}A`}{{ClBn}{{l{{j{h}}}}}}{{CnBn}{{l{{j{h}}}}}}{{D`Bn}{{Fl{A`}}}}<={{D`Eb}{{Fl{A`}}}}{{D`Al}{{Fl{A`}}}}1{{D`C`}{{Fl{A`}}}}{{ClAfb}{{l{{j{h}}}}}}{{CnAfb}{{l{{j{h}}}}}}{{D`b}A`}{{ClEb}{{l{{j{h}}}}}}{{CnEb}{{l{{j{h}}}}}}7{{ClAh}{{l{{j{h}}}}}}{{CnAh}{{l{{j{h}}}}}}{{D`Ah}{{Fl{A`}}}}{{D`e}{{Fl{A`}}}{{Hl{Bb}}}{{Hd{}{{Hb{c}}}}}}0{{Al{B`{c}}}A`{{Hl{Bb}}}}{{Al{B`{Cd}}}A`}{{Al{B`{c}}}A`{{Hl{Af}}}}{{Al{B`{c}}}A`{{Hl{Ad}}}}2{{Al{B`{Cf}}}A`}{{AlAn{B`{Gn}}}{{B`{Gn}}}}{{ClEd}{{l{{j{h}}}}}}{{CnEd}{{l{{j{h}}}}}}{{D`Ed}{{Fl{A`}}}}{Cl{{l{{j{h}}}}}}{Cn{{l{{j{h}}}}}}{D`Ah}{{}Fd}00000032{{bb}b}{{bb}A`}{Db{{l{{j{h}}}}}}{Dd{{l{{j{h}}}}}}{D`{{Fh{{Bd{Bb}}}}}}210{Al{{B`{An}}}}{ce{}{}}000000000{cBb{}}000{{{Ef{c}}Gd}{{Fl{A`}}}Aj}{{{Ej{c}}Gd}{{Fl{A`}}}Ab}{{{Ef{c}}e}{{Fl{A`}}}Aj{{Hd{}{{Hb{Dj}}}}}}{{{Ej{c}}e}{{Fl{A`}}}Ab{{Hd{}{{Hb{Dj}}}}}}{Al{{B`{Cd}}}}{Al{{B`{Af}}}}{Ab{{l{{j{h}}}}}}{Aj{{l{{j{h}}}}}}{c{{En{e}}}{}{}}00{Gn{{En{Bnc}}}{}}111111111111{Gn{{En{bc}}}{}}22{Gn{{Gj{Af}}}}{An{{Gj{Af}}}}{Bb{{Gj{Af}}}}55555555555555555{cHn{}}0000000000000000{Al{{B`{Ad}}}};{Al{{B`{Cf}}}}{Cl{{l{{j{h}}}}}}{Cn{{l{{j{h}}}}}}{D`Ed}{ce{}{}}0000000000000000````````````{{Chc}Ch{{Hl{Bb}}}}{{Che}Ch{{Hl{Bb}}}{{Hd{}{{Hb{c}}}}}}{{Chc}Ch{{Hl{Ad}}}}1{{ChCd}Ch}{{ChCf}Ch}5555{ChAl}{Cj{{Fl{D`}}}}{{CjAh}Cj}00000000{ChCh}{{ce}A`{}{}}88{{Chc}Ch{{Hl{El}}}}{{}Ch}{{Cjc}Cj{{Hl{Bb}}}}92{{ChG`}Gb}{{CjG`}Gb}{cc{}}08>83{ce{}{}}06{{Chb}Ch}{{CjBn}Cj}{{Che}Ch{{Hl{Bb}}}{{Hd{}{{Hb{c}}}}}}{{Chc}Ch{{Hl{Bb}}}}{{CjEb}Cj}{{CjAl}Cj}1{{}c{}}{{ChAnc}Ch{{Hl{Gn}}}}{{CjC`}Cj}{{Cjb}Cj}5{{CjAh}Cj}{{Cje}Cj{{Hl{Bb}}}{{Hd{}{{Hb{c}}}}}}08<{{ChCd}Ch}{{Chc}Ch{{Hl{Af}}}}{c{{En{e}}}{}{}}000{cHn{}}0{{Chc}Ch{{Hl{Ad}}}}4{{ChCf}Ch}{{CjEd}Cj}{ce{}{}}0","c":[],"p":[[5,"Time",0],[10,"PlaylistsInterface",0],[8,"PlaylistId",0],[10,"Future",679],[5,"Box",680],[5,"Pin",681],[10,"LocalPlaylistsInterface",0],[1,"unit"],[10,"TrackListInterface",0],[8,"Uri",0],[5,"TrackId",0],[1,"bool"],[10,"LocalTrackListInterface",0],[5,"Metadata",0],[1,"str"],[6,"Option",682],[5,"String",683],[5,"Vec",684],[6,"Format",685],[1,"usize"],[1,"i64"],[1,"i128"],[6,"LoopStatus",0],[6,"PlaybackStatus",0],[6,"PlaylistOrdering",0],[1,"i32"],[1,"f64"],[5,"MetadataBuilder",605],[5,"PlayerBuilder",605],[10,"PlayerInterface",0],[10,"LocalPlayerInterface",0],[5,"Player",0],[10,"RootInterface",0],[10,"LocalRootInterface",0],[5,"Playlist",0],[6,"Property",0],[6,"TrackListProperty",0],[6,"PlaylistsProperty",0],[6,"Ordering",686],[10,"Fn",687],[8,"PlaybackRate",0],[8,"Volume",0],[5,"LocalServer",0],[5,"Connection",688],[5,"Server",0],[8,"DateTime",0],[6,"Result",689],[10,"Deserializer",690],[6,"Error",691],[5,"Signature",692],[10,"TryInto",693],[5,"Ref",694],[6,"Signal",0],[8,"Result",695],[5,"LocalServerRunTask",0],[5,"Formatter",696],[8,"Result",696],[6,"TrackListSignal",0],[6,"PlaylistsSignal",0],[5,"ObjectPath",697],[8,"Result",691],[1,"u32"],[6,"Value",698],[10,"Hasher",699],[17,"Item"],[10,"IntoIterator",700],[5,"Context",701],[6,"Poll",702],[10,"Serializer",703],[10,"Into",693],[5,"TypeId",704],[15,"PlaylistChanged",596],[15,"Seeked",597],[15,"TrackAdded",598],[15,"TrackListReplaced",598],[15,"TrackMetadataChanged",598],[15,"TrackRemoved",598]],"b":[[249,"impl-Display-for-LoopStatus"],[250,"impl-Debug-for-LoopStatus"],[252,"impl-Display-for-PlaybackStatus"],[253,"impl-Debug-for-PlaybackStatus"],[256,"impl-Display-for-PlaylistOrdering"],[257,"impl-Debug-for-PlaylistOrdering"],[265,"impl-Display-for-TrackId"],[266,"impl-Debug-for-TrackId"],[535,"impl-TryFrom%3CValue%3C\'_%3E%3E-for-TrackId"],[536,"impl-TryFrom%3C%26str%3E-for-TrackId"],[537,"impl-TryFrom%3CString%3E-for-TrackId"]],"a":{"activateplaylist":[79,80],"activeplaylist":[81,82],"addtrack":[85,86],"cancontrol":[139,140],"canedittracks":[142,143],"cangonext":[144,145],"cangoprevious":[147,148],"canpause":[150,151],"canplay":[153,154],"canquit":[156,157],"canraise":[159,160],"canseek":[162,163],"cansetfullscreen":[165,166],"desktopentry":[222,223],"fullscreen":[289,290,435,436],"getplaylists":[294,295],"gettracksmetadata":[296,297],"goto":[299,300],"hastracklist":[301,302],"identity":[308,309],"loop_status":[24],"loopstatus":[337,338,443,444],"maximumrate":[342,343],"metadata":[345,346],"metadata_map":[29],"minimumrate":[348,349],"next":[361,362],"openuri":[366,367],"orderings":[368,369],"org.mpris.mediaplayer2.player":[18,41],"org.mpris.mediaplayer2.playlists":[19,49],"org.mpris.mediaplayer2.tracklist":[23,66],"pause":[371,372],"play":[373,374],"playback_rate":[37],"playback_status":[38],"playbackstatus":[377,378],"playlist_id":[47],"playlist_ordering":[48],"playlistcount":[380,381],"playpause":[375,376],"position":[387,388],"previous":[390,391],"quit":[394,395],"raise":[396,397],"rate":[398,399,455,456],"removetrack":[401,402],"seek":[407,408],"setposition":[452,453],"shuffle":[458,459,473,474],"stop":[483,484],"supportedmimetypes":[487,488],"supportedurischemes":[490,491],"time_in_us":[62],"track_id":[65],"tracks":[514,515],"volume":[470,471,575,576]}}]\ ]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); diff --git a/settings.html b/settings.html index a84d957..7e84e24 100644 --- a/settings.html +++ b/settings.html @@ -1,2 +1,2 @@ -Settings +Settings

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/src/mpris_server/lib.rs.html b/src/mpris_server/lib.rs.html index 8118f23..166a163 100644 --- a/src/mpris_server/lib.rs.html +++ b/src/mpris_server/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source // * Add public `test` method to check if interface is implemented correctly // * Avoid clones in `Metadata` getters -mod local_server; +mod local_server; mod loop_status; -mod metadata; +mod metadata; mod playback_status; mod player; mod playlist; @@ -1263,14 +1263,14 @@

    Files

mod server; mod signal; mod time; -mod track_id; +mod track_id; /// This contains the definitions of builder-pattern structs. /// /// The `builder` methods on the objects must be used instead to construct /// these builder-pattern structs. pub mod builder { - pub use crate::{metadata::MetadataBuilder, player::PlayerBuilder}; + pub use crate::{metadata::MetadataBuilder, player::PlayerBuilder}; } /// Retrofits support for `async fn` in trait impls and declarations. @@ -1311,7 +1311,7 @@

Files

use zbus::{fdo, zvariant::OwnedObjectPath, Result}; pub use crate::{ - local_server::{LocalServer, LocalServerRunTask}, + local_server::{LocalServer, LocalServerRunTask}, loop_status::LoopStatus, metadata::{DateTime, Metadata}, playback_status::PlaybackStatus, diff --git a/src/mpris_server/local_server.rs.html b/src/mpris_server/local_server.rs.html index 7fe6313..4755d80 100644 --- a/src/mpris_server/local_server.rs.html +++ b/src/mpris_server/local_server.rs.html @@ -1,4 +1,4 @@ -local_server.rs - source 1041 1042 1043 +1044 +1045 +1046 +1047 +1048 +1049 +1050 +1051
use std::{
     cell::RefCell,
     fmt,
     future::Future,
-    marker::PhantomData,
+    marker::PhantomData,
     pin::Pin,
     rc::Rc,
     task::{Context, Poll},
 };
 
+use async_channel::{Receiver, Sender};
 use async_trait::async_trait;
-use futures_channel::{mpsc, oneshot};
-use futures_util::{FutureExt, StreamExt};
+use futures_channel::oneshot;
 use zbus::{fdo, Connection, Result};
 
 use crate::{
@@ -1154,7 +1162,7 @@ 

Files

} struct InnerImp<T> { - tx: mpsc::UnboundedSender<Action>, + tx: Sender<Action>, // If we use `PhantomData<T>` and `T` is not `Send` and `Sync`, we get a compile error // when using `InnerImp` in the inner non-local `Server` as it requires `T` to be `Send` @@ -1165,20 +1173,20 @@

Files

} impl<T> InnerImp<T> { - fn send_root(&self, action: RootAction) { - self.tx.unbounded_send(Action::Root(action)).unwrap(); + async fn send_root(&self, action: RootAction) { + self.tx.send(Action::Root(action)).await.unwrap(); } - fn send_player(&self, action: PlayerAction) { - self.tx.unbounded_send(Action::Player(action)).unwrap(); + async fn send_player(&self, action: PlayerAction) { + self.tx.send(Action::Player(action)).await.unwrap(); } - fn send_track_list(&self, action: TrackListAction) { - self.tx.unbounded_send(Action::TrackList(action)).unwrap(); + async fn send_track_list(&self, action: TrackListAction) { + self.tx.send(Action::TrackList(action)).await.unwrap(); } - fn send_playlists(&self, action: PlaylistsAction) { - self.tx.unbounded_send(Action::Playlists(action)).unwrap(); + async fn send_playlists(&self, action: PlaylistsAction) { + self.tx.send(Action::Playlists(action)).await.unwrap(); } } @@ -1186,245 +1194,249 @@

Files

impl<T> RootInterface for InnerImp<T> { async fn raise(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::Raise(tx)); - rx.await.unwrap() + self.send_root(RootAction::Raise(tx)).await; + rx.await.unwrap() } async fn quit(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::Quit(tx)); - rx.await.unwrap() + self.send_root(RootAction::Quit(tx)).await; + rx.await.unwrap() } async fn can_quit(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::CanQuit(tx)); - rx.await.unwrap() + self.send_root(RootAction::CanQuit(tx)).await; + rx.await.unwrap() } async fn fullscreen(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::Fullscreen(tx)); - rx.await.unwrap() + self.send_root(RootAction::Fullscreen(tx)).await; + rx.await.unwrap() } async fn set_fullscreen(&self, fullscreen: bool) -> Result<()> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::SetFullscreen(fullscreen, tx)); - rx.await.unwrap() + self.send_root(RootAction::SetFullscreen(fullscreen, tx)) + .await; + rx.await.unwrap() } - async fn can_set_fullscreen(&self) -> fdo::Result<bool> { + async fn can_set_fullscreen(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::CanSetFullScreen(tx)); - rx.await.unwrap() + self.send_root(RootAction::CanSetFullScreen(tx)).await; + rx.await.unwrap() } - async fn can_raise(&self) -> fdo::Result<bool> { + async fn can_raise(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::CanRaise(tx)); - rx.await.unwrap() + self.send_root(RootAction::CanRaise(tx)).await; + rx.await.unwrap() } - async fn has_track_list(&self) -> fdo::Result<bool> { + async fn has_track_list(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::HasTrackList(tx)); - rx.await.unwrap() + self.send_root(RootAction::HasTrackList(tx)).await; + rx.await.unwrap() } - async fn identity(&self) -> fdo::Result<String> { + async fn identity(&self) -> fdo::Result<String> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::Identity(tx)); - rx.await.unwrap() + self.send_root(RootAction::Identity(tx)).await; + rx.await.unwrap() } - async fn desktop_entry(&self) -> fdo::Result<String> { + async fn desktop_entry(&self) -> fdo::Result<String> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::DesktopEntry(tx)); - rx.await.unwrap() + self.send_root(RootAction::DesktopEntry(tx)).await; + rx.await.unwrap() } - async fn supported_uri_schemes(&self) -> fdo::Result<Vec<String>> { + async fn supported_uri_schemes(&self) -> fdo::Result<Vec<String>> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::SupportedUriSchemes(tx)); - rx.await.unwrap() + self.send_root(RootAction::SupportedUriSchemes(tx)).await; + rx.await.unwrap() } - async fn supported_mime_types(&self) -> fdo::Result<Vec<String>> { + async fn supported_mime_types(&self) -> fdo::Result<Vec<String>> { let (tx, rx) = oneshot::channel(); - self.send_root(RootAction::SupportedMimeTypes(tx)); - rx.await.unwrap() + self.send_root(RootAction::SupportedMimeTypes(tx)).await; + rx.await.unwrap() } } #[async_trait] impl<T> PlayerInterface for InnerImp<T> { - async fn next(&self) -> fdo::Result<()> { + async fn next(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Next(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Next(tx)).await; + rx.await.unwrap() } - async fn previous(&self) -> fdo::Result<()> { + async fn previous(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Previous(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Previous(tx)).await; + rx.await.unwrap() } - async fn pause(&self) -> fdo::Result<()> { + async fn pause(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Pause(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Pause(tx)).await; + rx.await.unwrap() } - async fn play_pause(&self) -> fdo::Result<()> { + async fn play_pause(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::PlayPause(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::PlayPause(tx)).await; + rx.await.unwrap() } - async fn stop(&self) -> fdo::Result<()> { + async fn stop(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Stop(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Stop(tx)).await; + rx.await.unwrap() } - async fn play(&self) -> fdo::Result<()> { + async fn play(&self) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Play(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Play(tx)).await; + rx.await.unwrap() } - async fn seek(&self, offset: Time) -> fdo::Result<()> { + async fn seek(&self, offset: Time) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Seek(offset, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Seek(offset, tx)).await; + rx.await.unwrap() } - async fn set_position(&self, track_id: TrackId, position: Time) -> fdo::Result<()> { + async fn set_position(&self, track_id: TrackId, position: Time) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::SetPosition(track_id, position, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::SetPosition(track_id, position, tx)) + .await; + rx.await.unwrap() } - async fn open_uri(&self, uri: String) -> fdo::Result<()> { + async fn open_uri(&self, uri: String) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::OpenUri(uri, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::OpenUri(uri, tx)).await; + rx.await.unwrap() } - async fn playback_status(&self) -> fdo::Result<PlaybackStatus> { + async fn playback_status(&self) -> fdo::Result<PlaybackStatus> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::PlaybackStatus(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::PlaybackStatus(tx)).await; + rx.await.unwrap() } - async fn loop_status(&self) -> fdo::Result<LoopStatus> { + async fn loop_status(&self) -> fdo::Result<LoopStatus> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::LoopStatus(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::LoopStatus(tx)).await; + rx.await.unwrap() } - async fn set_loop_status(&self, loop_status: LoopStatus) -> Result<()> { + async fn set_loop_status(&self, loop_status: LoopStatus) -> Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::SetLoopStatus(loop_status, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::SetLoopStatus(loop_status, tx)) + .await; + rx.await.unwrap() } - async fn rate(&self) -> fdo::Result<PlaybackRate> { + async fn rate(&self) -> fdo::Result<PlaybackRate> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Rate(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Rate(tx)).await; + rx.await.unwrap() } - async fn set_rate(&self, rate: PlaybackRate) -> Result<()> { + async fn set_rate(&self, rate: PlaybackRate) -> Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::SetRate(rate, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::SetRate(rate, tx)).await; + rx.await.unwrap() } - async fn shuffle(&self) -> fdo::Result<bool> { + async fn shuffle(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Shuffle(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Shuffle(tx)).await; + rx.await.unwrap() } - async fn set_shuffle(&self, shuffle: bool) -> Result<()> { + async fn set_shuffle(&self, shuffle: bool) -> Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::SetShuffle(shuffle, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::SetShuffle(shuffle, tx)) + .await; + rx.await.unwrap() } - async fn metadata(&self) -> fdo::Result<Metadata> { + async fn metadata(&self) -> fdo::Result<Metadata> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Metadata(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Metadata(tx)).await; + rx.await.unwrap() } - async fn volume(&self) -> fdo::Result<Volume> { + async fn volume(&self) -> fdo::Result<Volume> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Volume(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Volume(tx)).await; + rx.await.unwrap() } - async fn set_volume(&self, volume: Volume) -> Result<()> { + async fn set_volume(&self, volume: Volume) -> Result<()> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::SetVolume(volume, tx)); - rx.await.unwrap() + self.send_player(PlayerAction::SetVolume(volume, tx)).await; + rx.await.unwrap() } - async fn position(&self) -> fdo::Result<Time> { + async fn position(&self) -> fdo::Result<Time> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::Position(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::Position(tx)).await; + rx.await.unwrap() } - async fn minimum_rate(&self) -> fdo::Result<PlaybackRate> { + async fn minimum_rate(&self) -> fdo::Result<PlaybackRate> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::MinimumRate(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::MinimumRate(tx)).await; + rx.await.unwrap() } - async fn maximum_rate(&self) -> fdo::Result<PlaybackRate> { + async fn maximum_rate(&self) -> fdo::Result<PlaybackRate> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::MaximumRate(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::MaximumRate(tx)).await; + rx.await.unwrap() } - async fn can_go_next(&self) -> fdo::Result<bool> { + async fn can_go_next(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanGoNext(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanGoNext(tx)).await; + rx.await.unwrap() } - async fn can_go_previous(&self) -> fdo::Result<bool> { + async fn can_go_previous(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanGoPrevious(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanGoPrevious(tx)).await; + rx.await.unwrap() } - async fn can_play(&self) -> fdo::Result<bool> { + async fn can_play(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanPlay(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanPlay(tx)).await; + rx.await.unwrap() } - async fn can_pause(&self) -> fdo::Result<bool> { + async fn can_pause(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanPause(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanPause(tx)).await; + rx.await.unwrap() } - async fn can_seek(&self) -> fdo::Result<bool> { + async fn can_seek(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanSeek(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanSeek(tx)).await; + rx.await.unwrap() } - async fn can_control(&self) -> fdo::Result<bool> { + async fn can_control(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_player(PlayerAction::CanControl(tx)); - rx.await.unwrap() + self.send_player(PlayerAction::CanControl(tx)).await; + rx.await.unwrap() } } @@ -1433,50 +1445,55 @@

Files

where T: LocalTrackListInterface, { - async fn get_tracks_metadata(&self, track_ids: Vec<TrackId>) -> fdo::Result<Vec<Metadata>> { + async fn get_tracks_metadata(&self, track_ids: Vec<TrackId>) -> fdo::Result<Vec<Metadata>> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::GetTracksMetadata(track_ids, tx)); - rx.await.unwrap() + self.send_track_list(TrackListAction::GetTracksMetadata(track_ids, tx)) + .await; + rx.await.unwrap() } async fn add_track( - &self, - uri: Uri, - after_track: TrackId, - set_as_current: bool, + &self, + uri: Uri, + after_track: TrackId, + set_as_current: bool, ) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::AddTrack( - uri, - after_track, - set_as_current, - tx, - )); - rx.await.unwrap() + self.send_track_list(TrackListAction::AddTrack( + uri, + after_track, + set_as_current, + tx, + )) + .await; + rx.await.unwrap() } - async fn remove_track(&self, track_id: TrackId) -> fdo::Result<()> { + async fn remove_track(&self, track_id: TrackId) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::RemoveTrack(track_id, tx)); - rx.await.unwrap() + self.send_track_list(TrackListAction::RemoveTrack(track_id, tx)) + .await; + rx.await.unwrap() } - async fn go_to(&self, track_id: TrackId) -> fdo::Result<()> { + async fn go_to(&self, track_id: TrackId) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::GoTo(track_id, tx)); - rx.await.unwrap() + self.send_track_list(TrackListAction::GoTo(track_id, tx)) + .await; + rx.await.unwrap() } - async fn tracks(&self) -> fdo::Result<Vec<TrackId>> { + async fn tracks(&self) -> fdo::Result<Vec<TrackId>> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::Tracks(tx)); - rx.await.unwrap() + self.send_track_list(TrackListAction::Tracks(tx)).await; + rx.await.unwrap() } - async fn can_edit_tracks(&self) -> fdo::Result<bool> { + async fn can_edit_tracks(&self) -> fdo::Result<bool> { let (tx, rx) = oneshot::channel(); - self.send_track_list(TrackListAction::CanEditTracks(tx)); - rx.await.unwrap() + self.send_track_list(TrackListAction::CanEditTracks(tx)) + .await; + rx.await.unwrap() } } @@ -1485,46 +1502,50 @@

Files

where T: LocalPlaylistsInterface, { - async fn activate_playlist(&self, playlist_id: PlaylistId) -> fdo::Result<()> { + async fn activate_playlist(&self, playlist_id: PlaylistId) -> fdo::Result<()> { let (tx, rx) = oneshot::channel(); - self.send_playlists(PlaylistsAction::ActivatePlaylist(playlist_id, tx)); - rx.await.unwrap() + self.send_playlists(PlaylistsAction::ActivatePlaylist(playlist_id, tx)) + .await; + rx.await.unwrap() } async fn get_playlists( - &self, - index: u32, - max_count: u32, - order: PlaylistOrdering, - reverse_order: bool, + &self, + index: u32, + max_count: u32, + order: PlaylistOrdering, + reverse_order: bool, ) -> fdo::Result<Vec<Playlist>> { let (tx, rx) = oneshot::channel(); - self.send_playlists(PlaylistsAction::GetPlaylists( - index, - max_count, - order, - reverse_order, - tx, - )); - rx.await.unwrap() - } - - async fn playlist_count(&self) -> fdo::Result<u32> { + self.send_playlists(PlaylistsAction::GetPlaylists( + index, + max_count, + order, + reverse_order, + tx, + )) + .await; + rx.await.unwrap() + } + + async fn playlist_count(&self) -> fdo::Result<u32> { let (tx, rx) = oneshot::channel(); - self.send_playlists(PlaylistsAction::PlaylistCount(tx)); - rx.await.unwrap() + self.send_playlists(PlaylistsAction::PlaylistCount(tx)) + .await; + rx.await.unwrap() } - async fn orderings(&self) -> fdo::Result<Vec<PlaylistOrdering>> { + async fn orderings(&self) -> fdo::Result<Vec<PlaylistOrdering>> { let (tx, rx) = oneshot::channel(); - self.send_playlists(PlaylistsAction::Orderings(tx)); - rx.await.unwrap() + self.send_playlists(PlaylistsAction::Orderings(tx)).await; + rx.await.unwrap() } - async fn active_playlist(&self) -> fdo::Result<Option<Playlist>> { + async fn active_playlist(&self) -> fdo::Result<Option<Playlist>> { let (tx, rx) = oneshot::channel(); - self.send_playlists(PlaylistsAction::ActivePlaylist(tx)); - rx.await.unwrap() + self.send_playlists(PlaylistsAction::ActivePlaylist(tx)) + .await; + rx.await.unwrap() } } @@ -1538,24 +1559,24 @@

Files

/// See [`LocalServer::run`] for more information. #[must_use = "futures do nothing unless you `.await` or poll them"] pub struct LocalServerRunTask { - inner: Option<TaskInner>, + inner: Option<TaskInner>, } -impl fmt::Debug for LocalServerRunTask { +impl fmt::Debug for LocalServerRunTask { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("LocalServerRunTask") - .field("has_inner", &self.inner.is_some()) - .finish() + f.debug_struct("LocalServerRunTask") + .field("has_inner", &self.inner.is_some()) + .finish() } } -impl Future for LocalServerRunTask { +impl Future for LocalServerRunTask { type Output = (); fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { - match self.inner.as_mut() { - Some(inner) => inner.poll_unpin(cx), - None => Poll::Ready(()), + match self.inner.as_mut() { + Some(inner) => Pin::new(inner).poll(cx), + None => Poll::Ready(()), } } } @@ -1570,12 +1591,12 @@

Files

pub struct LocalServer<T> { inner: Server<InnerImp<T>>, imp: Rc<T>, - runner: RefCell<Option<TaskInner>>, + runner: RefCell<Option<TaskInner>>, } impl<T> fmt::Debug for LocalServer<T> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("LocalServer").finish() + f.debug_struct("LocalServer").finish() } } @@ -1604,20 +1625,15 @@

Files

/// [`LocalRootInterface`]: crate::LocalRootInterface /// [D-Bus specification]: https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus pub async fn new(bus_name_suffix: &str, imp: T) -> Result<Self> { - Self::new_inner( - bus_name_suffix, - imp, - Server::new, - |mut rx, imp| async move { - while let Some(action) = rx.next().await { - match action { - Action::Root(action) => Self::handle_root_action(&imp, action).await, - Action::Player(action) => Self::handle_player_action(&imp, action).await, - Action::TrackList(_) | Action::Playlists(_) => unreachable!(), - } + Self::new_inner(bus_name_suffix, imp, Server::new, |rx, imp| async move { + while let Ok(action) = rx.recv().await { + match action { + Action::Root(action) => Self::handle_root_action(&imp, action).await, + Action::Player(action) => Self::handle_player_action(&imp, action).await, + Action::TrackList(_) | Action::Playlists(_) => unreachable!(), } - }, - ) + } + }) .await } @@ -1627,16 +1643,16 @@

Files

/// The task must be awaited as soon as possible after creating the server. /// /// The returned task is no-op if the server has been ran before. - pub fn run(&self) -> LocalServerRunTask { - LocalServerRunTask { - inner: self.runner.take(), + pub fn run(&self) -> LocalServerRunTask { + LocalServerRunTask { + inner: self.runner.take(), } } /// Returns a reference to the underlying implementation. #[inline] pub fn imp(&self) -> &T { - &self.imp + &self.imp } /// Returns a reference to the inner [`Connection`]. @@ -1646,7 +1662,7 @@

Files

#[cfg_attr(docsrs, doc(cfg(feature = "unstable")))] #[inline]
pub fn connection(&self) -> &Connection { - self.inner.connection() + self.inner.connection() } /// Emits the given signal. @@ -1850,13 +1866,13 @@

Files

bus_name_suffix: &'a str, imp: T, server_func: impl FnOnce(&'a str, InnerImp<T>) -> SR + 'static, - runner_func: impl FnOnce(mpsc::UnboundedReceiver<Action>, Rc<T>) -> RR + 'static, + runner_func: impl FnOnce(Receiver<Action>, Rc<T>) -> RR + 'static, ) -> Result<Self> where SR: Future<Output = Result<Server<InnerImp<T>>>>, RR: Future<Output = ()> + 'static, { - let (tx, rx) = mpsc::unbounded::<Action>(); + let (tx, rx) = async_channel::bounded(1); let inner = server_func( bus_name_suffix, @@ -1894,8 +1910,8 @@

Files

bus_name_suffix, imp, Server::new_with_track_list, - |mut rx, imp| async move { - while let Some(action) = rx.next().await { + |rx, imp| async move { + while let Ok(action) = rx.recv().await { match action { Action::Root(action) => Self::handle_root_action(&imp, action).await, Action::Player(action) => Self::handle_player_action(&imp, action).await, @@ -1976,8 +1992,8 @@

Files

bus_name_suffix, imp, Server::new_with_playlists, - |mut rx, imp| async move { - while let Some(action) = rx.next().await { + |rx, imp| async move { + while let Ok(action) = rx.recv().await { match action { Action::Root(action) => Self::handle_root_action(&imp, action).await, Action::Player(action) => Self::handle_player_action(&imp, action).await, @@ -2055,8 +2071,8 @@

Files

bus_name_suffix, imp, Server::new_with_all, - |mut rx, imp| async move { - while let Some(action) = rx.next().await { + |rx, imp| async move { + while let Ok(action) = rx.recv().await { match action { Action::Root(action) => Self::handle_root_action(&imp, action).await, Action::Player(action) => Self::handle_player_action(&imp, action).await, diff --git a/src/mpris_server/loop_status.rs.html b/src/mpris_server/loop_status.rs.html index 17bbe77..1b1ca03 100644 --- a/src/mpris_server/loop_status.rs.html +++ b/src/mpris_server/loop_status.rs.html @@ -1,4 +1,4 @@ -loop_status.rs - source impl fmt::Display for LoopStatus { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(self.as_str()) + f.write_str(self.as_str()) } } diff --git a/src/mpris_server/metadata.rs.html b/src/mpris_server/metadata.rs.html index 21ff87c..8a4b769 100644 --- a/src/mpris_server/metadata.rs.html +++ b/src/mpris_server/metadata.rs.html @@ -1,4 +1,4 @@ -metadata.rs - source 553 554 555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678
use std::{collections::HashMap, fmt};
 
 use serde::Serialize;
-use zbus::zvariant::{self, Type, Value};
+use zbus::zvariant::{Error, Result, Type, Value};
 
 use crate::{Time, TrackId, Uri};
 
@@ -586,47 +709,59 @@ 

Files

/// [`mpris:trackid`]: Metadata::set_trackid /// [`mpris:length`]: Metadata::set_length /// [`mpris:artUrl`]: Metadata::set_art_url -#[derive(Clone, PartialEq, Serialize, Type)] +#[derive(PartialEq, Serialize, Type)] #[serde(transparent)] #[zvariant(signature = "a{sv}")] #[doc(alias = "Metadata_Map")] pub struct Metadata(HashMap<String, Value<'static>>); +impl Clone for Metadata { + fn clone(&self) -> Self { + // TODO Make this more efficient + Self( + self.0 + .iter() + .map(|(k, v)| (k.clone(), v.try_clone().expect("metadata contained an fd"))) + .collect::<HashMap<_, _>>(), + ) + } +} + impl fmt::Debug for Metadata { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Debug::fmt(&self.0, f) + fmt::Debug::fmt(&self.0, f) } } impl Default for Metadata { fn default() -> Self { - Self::new() + Self::new() } } impl Metadata { /// Creates an empty [`Metadata`]. pub fn new() -> Self { - Self(HashMap::new()) + Self(HashMap::new()) } /// Creates a new builder-pattern struct instance to construct [`Metadata`]. - pub fn builder() -> MetadataBuilder { - MetadataBuilder { m: Metadata::new() } + pub fn builder() -> MetadataBuilder { + MetadataBuilder { m: Metadata::new() } } /// Returns the value corresponding to the key and convert it to `V`. - pub fn get<'v, V>(&'v self, key: &str) -> Option<zvariant::Result<&'v V>> + pub fn get<'v, V>(&'v self, key: &str) -> Option<Result<&'v V>> where &'v V: TryFrom<&'v Value<'v>>, + <&'v V as TryFrom<&'v Value<'v>>>::Error: Into<Error>, { - self.get_value(key) - .map(|v| v.downcast_ref().ok_or(zvariant::Error::IncorrectType)) + self.get_value(key).map(|v| v.downcast_ref()) } /// Returns a reference to the value corresponding to the key. pub fn get_value(&self, key: &str) -> Option<&Value<'_>> { - self.0.get(key) + self.0.get(key) } /// Sets the value for the given key and returns the previous value, if any. @@ -638,7 +773,7 @@

Files

key: &str, value: Option<impl Into<Value<'static>>>, ) -> Option<Value<'static>> { - self.set_value(key, value.map(|value| value.into())) + self.set_value(key, value.map(|value| value.into())) } /// Sets the value for the given key and returns the previous value, if any. @@ -650,10 +785,10 @@

Files

key: &str, value: Option<Value<'static>>, ) -> Option<Value<'static>> { - if let Some(value) = value { - self.0.insert(key.into(), value) + if let Some(value) = value { + self.0.insert(key.into(), value) } else { - self.0.remove(key) + self.0.remove(key) } } @@ -665,7 +800,10 @@

Files

/// D-Bus object at that path; this specification says nothing about /// what interfaces such an object may implement.
pub fn trackid(&self) -> Option<TrackId> { - self.get_value("mpris:trackid")?.clone().downcast() + self.get_value("mpris:trackid")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets a unique identity for this track within the context of an @@ -676,17 +814,20 @@

Files

/// D-Bus object at that path; this specification says nothing about /// what interfaces such an object may implement.
pub fn set_trackid(&mut self, trackid: Option<impl Into<TrackId>>) { - self.set("mpris:trackid", trackid.map(|trackid| trackid.into())); + self.set("mpris:trackid", trackid.map(|trackid| trackid.into())); } /// The duration of the track. pub fn length(&self) -> Option<Time> { - self.get_value("mpris:length")?.clone().downcast() + self.get_value("mpris:length")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the duration of the track. pub fn set_length(&mut self, length: Option<Time>) { - self.set("mpris:length", length); + self.set("mpris:length", length); } /// The location of an image representing the track or album. @@ -694,7 +835,10 @@

Files

/// Clients should not assume this will continue to exist when /// the media player stops giving out the URL.
pub fn art_url(&self) -> Option<Uri> { - self.get_value("mpris:artUrl")?.clone().downcast() + self.get_value("mpris:artUrl")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the location of an image representing the track or album. @@ -702,22 +846,25 @@

Files

/// Clients should not assume this will continue to exist when /// the media player stops giving out the URL.
pub fn set_art_url(&mut self, art_url: Option<impl Into<Uri>>) { - self.set("mpris:artUrl", art_url.map(|art_url| art_url.into())); + self.set("mpris:artUrl", art_url.map(|art_url| art_url.into())); } /// The album name. pub fn album(&self) -> Option<&str> { - self.get_value("xesam:album")?.downcast_ref() + self.get_value("xesam:album")?.downcast_ref().ok() } /// Sets the album name. pub fn set_album(&mut self, album: Option<impl Into<String>>) { - self.set("xesam:album", album.map(|album| album.into())); + self.set("xesam:album", album.map(|album| album.into())); } /// The album artist(s). pub fn album_artist(&self) -> Option<Vec<String>> { - self.get_value("xesam:albumArtist")?.clone().downcast() + self.get_value("xesam:albumArtist")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the album artist(s). @@ -725,215 +872,242 @@

Files

&mut self, album_artist: Option<impl IntoIterator<Item = impl Into<String>>>, ) { - self.set( + self.set( "xesam:albumArtist", - album_artist.map(|album_artist| { - album_artist - .into_iter() - .map(|i| i.into()) - .collect::<Vec<_>>() + album_artist.map(|album_artist| { + album_artist + .into_iter() + .map(|i| i.into()) + .collect::<Vec<_>>() }), ); } /// The track artist(s). pub fn artist(&self) -> Option<Vec<String>> { - self.get_value("xesam:artist")?.clone().downcast() + self.get_value("xesam:artist")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the track artist(s). pub fn set_artist(&mut self, artist: Option<impl IntoIterator<Item = impl Into<String>>>) { - self.set( + self.set( "xesam:artist", - artist.map(|artist| artist.into_iter().map(|i| i.into()).collect::<Vec<_>>()), + artist.map(|artist| artist.into_iter().map(|i| i.into()).collect::<Vec<_>>()), ); } /// The track lyrics. pub fn lyrics(&self) -> Option<&str> { - self.get_value("xesam:asText")?.downcast_ref() + self.get_value("xesam:asText")?.downcast_ref().ok() } /// Sets the track lyrics. pub fn set_lyrics(&mut self, lyrics: Option<impl Into<String>>) { - self.set("xesam:asText", lyrics.map(|lyrics| lyrics.into())); + self.set("xesam:asText", lyrics.map(|lyrics| lyrics.into())); } /// The speed of the music, in beats per minute. pub fn audio_bpm(&self) -> Option<i32> { - self.get_value("xesam:audioBPM")?.downcast_ref().copied() + self.get_value("xesam:audioBPM")?.downcast_ref().ok() } /// Sets the speed of the music, in beats per minute. pub fn set_audio_bpm(&mut self, audio_bpm: Option<i32>) { - self.set("xesam:audioBPM", audio_bpm); + self.set("xesam:audioBPM", audio_bpm); } /// An automatically-generated rating, based on things such /// as how often it has been played. This should be in the /// range 0.0 to 1.0. pub fn auto_rating(&self) -> Option<f64> { - self.get_value("xesam:autoRating")?.downcast_ref().copied() + self.get_value("xesam:autoRating")?.downcast_ref().ok() } /// Sets an automatically-generated rating, based on things such /// as how often it has been played. This should be in the /// range 0.0 to 1.0. pub fn set_auto_rating(&mut self, auto_rating: Option<f64>) { - self.set("xesam:autoRating", auto_rating); + self.set("xesam:autoRating", auto_rating); } /// A (list of) freeform comment(s). pub fn comment(&self) -> Option<Vec<String>> { - self.get_value("xesam:comment")?.clone().downcast() + self.get_value("xesam:comment")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets a (list of) freeform comment(s). pub fn set_comment(&mut self, comment: Option<impl IntoIterator<Item = impl Into<String>>>) { - self.set( + self.set( "xesam:comment", - comment.map(|comment| comment.into_iter().map(|i| i.into()).collect::<Vec<_>>()), + comment.map(|comment| comment.into_iter().map(|i| i.into()).collect::<Vec<_>>()), ); } /// The composer(s) of the track. pub fn composer(&self) -> Option<Vec<String>> { - self.get_value("xesam:composer")?.clone().downcast() + self.get_value("xesam:composer")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the composer(s) of the track. pub fn set_composer(&mut self, composer: Option<impl IntoIterator<Item = impl Into<String>>>) { - self.set( + self.set( "xesam:composer", - composer.map(|composer| composer.into_iter().map(|i| i.into()).collect::<Vec<_>>()), + composer.map(|composer| composer.into_iter().map(|i| i.into()).collect::<Vec<_>>()), ); } /// When the track was created. Usually only the year component /// will be useful. pub fn content_created(&self) -> Option<DateTime> { - self.get_value("xesam:contentCreated")?.clone().downcast() + self.get_value("xesam:contentCreated")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets when the track was created. Usually only the year component /// will be useful. pub fn set_content_created(&mut self, content_created: Option<impl Into<DateTime>>) { - self.set( + self.set( "xesam:contentCreated", - content_created.map(|content_created| content_created.into()), + content_created.map(|content_created| content_created.into()), ); } /// The disc number on the album that this track is from. pub fn disc_number(&self) -> Option<i32> { - self.get_value("xesam:discNumber")?.downcast_ref().copied() + self.get_value("xesam:discNumber")?.downcast_ref().ok() } /// Sets the disc number on the album that this track is from. pub fn set_disc_number(&mut self, disc_number: Option<i32>) { - self.set("xesam:discNumber", disc_number); + self.set("xesam:discNumber", disc_number); } /// When the track was first played. pub fn first_used(&self) -> Option<DateTime> { - self.get_value("xesam:firstUsed")?.clone().downcast() + self.get_value("xesam:firstUsed")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets when the track was first played. pub fn set_first_used(&mut self, first_used: Option<impl Into<DateTime>>) { - self.set( + self.set( "xesam:firstUsed", - first_used.map(|first_used| first_used.into()), + first_used.map(|first_used| first_used.into()), ); } /// The genre(s) of the track. pub fn genre(&self) -> Option<Vec<String>> { - self.get_value("xesam:genre")?.clone().downcast() + self.get_value("xesam:genre")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the genre(s) of the track. pub fn set_genre(&mut self, genre: Option<impl IntoIterator<Item = impl Into<String>>>) { - self.set( + self.set( "xesam:genre", - genre.map(|genre| genre.into_iter().map(|i| i.into()).collect::<Vec<_>>()), + genre.map(|genre| genre.into_iter().map(|i| i.into()).collect::<Vec<_>>()), ); } /// When the track was last played. pub fn last_used(&self) -> Option<DateTime> { - self.get_value("xesam:lastUsed")?.clone().downcast() + self.get_value("xesam:lastUsed")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets when the track was last played. pub fn set_last_used(&mut self, last_used: Option<impl Into<DateTime>>) { - self.set( + self.set( "xesam:lastUsed", - last_used.map(|last_used| last_used.into()), + last_used.map(|last_used| last_used.into()), ); } /// The lyricist(s) of the track. pub fn lyricist(&self) -> Option<Vec<String>> { - self.get_value("xesam:lyricist")?.clone().downcast() + self.get_value("xesam:lyricist")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the lyricist(s) of the track. pub fn set_lyricist(&mut self, lyricist: Option<impl IntoIterator<Item = impl Into<String>>>) { - self.set( + self.set( "xesam:lyricist", - lyricist.map(|lyricist| lyricist.into_iter().map(|i| i.into()).collect::<Vec<_>>()), + lyricist.map(|lyricist| lyricist.into_iter().map(|i| i.into()).collect::<Vec<_>>()), ); } /// The track title. pub fn title(&self) -> Option<&str> { - self.get_value("xesam:title")?.downcast_ref() + self.get_value("xesam:title")?.downcast_ref().ok() } /// Sets the track title. pub fn set_title(&mut self, title: Option<impl Into<String>>) { - self.set("xesam:title", title.map(|title| title.into())); + self.set("xesam:title", title.map(|title| title.into())); } /// The track number on the album disc. pub fn track_number(&self) -> Option<i32> { - self.get_value("xesam:trackNumber")?.downcast_ref().copied() + self.get_value("xesam:trackNumber")?.downcast_ref().ok() } /// Sets the track number on the album disc. pub fn set_track_number(&mut self, track_number: Option<i32>) { - self.set("xesam:trackNumber", track_number); + self.set("xesam:trackNumber", track_number); } /// The location of the media file. pub fn url(&self) -> Option<Uri> { - self.get_value("xesam:url")?.clone().downcast() + self.get_value("xesam:url")? + .try_clone() + .ok() + .and_then(|v| v.downcast().ok()) } /// Sets the location of the media file. pub fn set_url(&mut self, url: Option<impl Into<Uri>>) { - self.set("xesam:url", url.map(|url| url.into())); + self.set("xesam:url", url.map(|url| url.into())); } /// The number of times the track has been played. pub fn use_count(&self) -> Option<i32> { - self.get_value("xesam:useCount")?.downcast_ref().copied() + self.get_value("xesam:useCount")?.downcast_ref().ok() } /// Sets the number of times the track has been played. pub fn set_use_count(&mut self, use_count: Option<i32>) { - self.set("xesam:useCount", use_count); + self.set("xesam:useCount", use_count); } /// A user-specified rating. This should be in the range 0.0 to 1.0. pub fn user_rating(&self) -> Option<f64> { - self.get_value("xesam:userRating")?.downcast_ref().copied() + self.get_value("xesam:userRating")?.downcast_ref().ok() } /// Sets a user-specified rating. This should be in the range 0.0 to 1.0. pub fn set_user_rating(&mut self, user_rating: Option<f64>) { - self.set("xesam:userRating", user_rating); + self.set("xesam:userRating", user_rating); } } @@ -944,11 +1118,11 @@

Files

m: Metadata, } -impl MetadataBuilder { +impl MetadataBuilder { /// Sets a value for the given key. pub fn other(mut self, key: &str, value: impl Into<Value<'static>>) -> Self { - self.m.set(key, Some(value)); - self + self.m.set(key, Some(value)); + self } /// Sets a unique identity for this track within the context of an @@ -959,14 +1133,14 @@

Files

/// D-Bus object at that path; this specification says nothing about /// what interfaces such an object may implement.
pub fn trackid(mut self, trackid: impl Into<TrackId>) -> Self { - self.m.set_trackid(Some(trackid)); - self + self.m.set_trackid(Some(trackid)); + self } /// Sets the duration of the track. pub fn length(mut self, length: Time) -> Self { - self.m.set_length(Some(length)); - self + self.m.set_length(Some(length)); + self } /// Sets the location of an image representing the track or album. @@ -974,14 +1148,14 @@

Files

/// Clients should not assume this will continue to exist when /// the media player stops giving out the URL.
pub fn art_url(mut self, art_url: impl Into<Uri>) -> Self { - self.m.set_art_url(Some(art_url)); - self + self.m.set_art_url(Some(art_url)); + self } /// Sets the album name. pub fn album(mut self, album: impl Into<String>) -> Self { - self.m.set_album(Some(album)); - self + self.m.set_album(Some(album)); + self } /// Sets the album artist(s). @@ -989,125 +1163,197 @@

Files

mut self, album_artist: impl IntoIterator<Item = impl Into<String>>, ) -> Self { - self.m.set_album_artist(Some(album_artist)); - self + self.m.set_album_artist(Some(album_artist)); + self } /// Sets the track artist(s). pub fn artist(mut self, artist: impl IntoIterator<Item = impl Into<String>>) -> Self { - self.m.set_artist(Some(artist)); - self + self.m.set_artist(Some(artist)); + self } /// Sets the track lyrics. pub fn lyrics(mut self, lyrics: impl Into<String>) -> Self { - self.m.set_lyrics(Some(lyrics)); - self + self.m.set_lyrics(Some(lyrics)); + self } /// Sets the speed of the music, in beats per minute. pub fn audio_bpm(mut self, audio_bpm: i32) -> Self { - self.m.set_audio_bpm(Some(audio_bpm)); - self + self.m.set_audio_bpm(Some(audio_bpm)); + self } /// Sets an automatically-generated rating, based on things such /// as how often it has been played. This should be in the /// range 0.0 to 1.0. pub fn auto_rating(mut self, auto_rating: f64) -> Self { - self.m.set_auto_rating(Some(auto_rating)); - self + self.m.set_auto_rating(Some(auto_rating)); + self } /// Sets a (list of) freeform comment(s). pub fn comment(mut self, comment: impl IntoIterator<Item = impl Into<String>>) -> Self { - self.m.set_comment(Some(comment)); - self + self.m.set_comment(Some(comment)); + self } /// Sets the composer(s) of the track. pub fn composer(mut self, composer: impl IntoIterator<Item = impl Into<String>>) -> Self { - self.m.set_composer(Some(composer)); - self + self.m.set_composer(Some(composer)); + self } /// Sets when the track was created. Usually only the year component /// will be useful. pub fn content_created(mut self, content_created: impl Into<DateTime>) -> Self { - self.m.set_content_created(Some(content_created)); - self + self.m.set_content_created(Some(content_created)); + self } /// Sets the disc number on the album that this track is from. pub fn disc_number(mut self, disc_number: i32) -> Self { - self.m.set_disc_number(Some(disc_number)); - self + self.m.set_disc_number(Some(disc_number)); + self } /// Sets when the track was first played. pub fn first_used(mut self, first_used: impl Into<DateTime>) -> Self { - self.m.set_first_used(Some(first_used)); - self + self.m.set_first_used(Some(first_used)); + self } /// Sets the genre(s) of the track. pub fn genre(mut self, genre: impl IntoIterator<Item = impl Into<String>>) -> Self { - self.m.set_genre(Some(genre)); - self + self.m.set_genre(Some(genre)); + self } /// Sets when the track was last played. pub fn last_used(mut self, last_used: impl Into<DateTime>) -> Self { - self.m.set_last_used(Some(last_used)); - self + self.m.set_last_used(Some(last_used)); + self } /// Sets the lyricist(s) of the track. pub fn lyricist(mut self, lyricist: impl IntoIterator<Item = impl Into<String>>) -> Self { - self.m.set_lyricist(Some(lyricist)); - self + self.m.set_lyricist(Some(lyricist)); + self } /// Sets the track title. pub fn title(mut self, title: impl Into<String>) -> Self { - self.m.set_title(Some(title)); - self + self.m.set_title(Some(title)); + self } /// Sets the track number on the album disc. pub fn track_number(mut self, track_number: i32) -> Self { - self.m.set_track_number(Some(track_number)); - self + self.m.set_track_number(Some(track_number)); + self } /// Sets the location of the media file. pub fn url(mut self, url: impl Into<Uri>) -> Self { - self.m.set_url(Some(url)); - self + self.m.set_url(Some(url)); + self } /// Sets the number of times the track has been played. pub fn use_count(mut self, use_count: i32) -> Self { - self.m.set_use_count(Some(use_count)); - self + self.m.set_use_count(Some(use_count)); + self } /// Sets a user-specified rating. This should be in the range 0.0 to 1.0. pub fn user_rating(mut self, user_rating: f64) -> Self { - self.m.set_user_rating(Some(user_rating)); - self + self.m.set_user_rating(Some(user_rating)); + self } /// Creates [`Metadata`] from the builder. #[must_use = "building metadata is usually expensive and is not expected to have side effects"] pub fn build(self) -> Metadata { - self.m + self.m } } impl<'a> From<Metadata> for Value<'a> { fn from(metainfo: Metadata) -> Self { - Value::new(metainfo.0) + Value::new(metainfo.0) + } +} + +#[cfg(test)] +mod tests { + use zbus::zvariant::Str; + + use super::*; + + #[test] + fn clone() { + let original = Metadata::builder().trackid(TrackId::NO_TRACK).build(); + assert_eq!(original, original.clone()); + } + + #[test] + fn builder_and_getter() { + let m = Metadata::builder() + .other("other", "value") + .trackid(TrackId::try_from("/io/github/seadve/Player/Track123").unwrap()) + .length(Time::from_millis(2)) + .art_url("file:///tmp/cover.jpg") + .album("The Album") + .album_artist(vec!["The Album Artist".to_string()]) + .artist(vec!["The Artist".to_string()]) + .lyrics("The lyrics") + .audio_bpm(120) + .auto_rating(0.5) + .comment(vec!["The comment".to_string()]) + .composer(vec!["The Composer".to_string()]) + .content_created("2021-01-01T00:00:00".to_string()) + .disc_number(3) + .first_used("2021-01-01T00:00:00".to_string()) + .genre(vec!["The Genre".to_string()]) + .last_used("2021-01-01T00:00:00".to_string()) + .lyricist(vec!["The Lyricist".to_string()]) + .title("The Title") + .track_number(2) + .url("file:///tmp/track.mp3") + .use_count(1) + .user_rating(0.5) + .build(); + + assert_eq!( + m.get::<Str<'_>>("other"), + Some(Ok(&Str::from_static("value"))) + ); + assert_eq!( + m.trackid(), + Some(TrackId::try_from("/io/github/seadve/Player/Track123").unwrap()) + ); + assert_eq!(m.length(), Some(Time::from_millis(2))); + assert_eq!(m.art_url(), Some("file:///tmp/cover.jpg".into())); + assert_eq!(m.album(), Some("The Album")); + assert_eq!(m.album_artist(), Some(vec!["The Album Artist".to_string()])); + assert_eq!(m.artist(), Some(vec!["The Artist".to_string()])); + assert_eq!(m.lyrics(), Some("The lyrics")); + assert_eq!(m.audio_bpm(), Some(120)); + assert_eq!(m.auto_rating(), Some(0.5)); + assert_eq!(m.comment(), Some(vec!["The comment".to_string()])); + assert_eq!(m.composer(), Some(vec!["The Composer".to_string()])); + assert_eq!(m.content_created(), Some("2021-01-01T00:00:00".to_string())); + assert_eq!(m.disc_number(), Some(3)); + assert_eq!(m.first_used(), Some("2021-01-01T00:00:00".to_string())); + assert_eq!(m.genre(), Some(vec!["The Genre".to_string()])); + assert_eq!(m.last_used(), Some("2021-01-01T00:00:00".to_string())); + assert_eq!(m.lyricist(), Some(vec!["The Lyricist".to_string()])); + assert_eq!(m.title(), Some("The Title")); + assert_eq!(m.track_number(), Some(2)); + assert_eq!(m.url(), Some("file:///tmp/track.mp3".into())); + assert_eq!(m.use_count(), Some(1)); + assert_eq!(m.user_rating(), Some(0.5)); } }
\ No newline at end of file diff --git a/src/mpris_server/playback_status.rs.html b/src/mpris_server/playback_status.rs.html index 40a2f18..8f02ff2 100644 --- a/src/mpris_server/playback_status.rs.html +++ b/src/mpris_server/playback_status.rs.html @@ -1,4 +1,4 @@ -playback_status.rs - source impl fmt::Display for PlaybackStatus { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(self.as_str()) + f.write_str(self.as_str()) } } diff --git a/src/mpris_server/player.rs.html b/src/mpris_server/player.rs.html index ec6d107..47f9947 100644 --- a/src/mpris_server/player.rs.html +++ b/src/mpris_server/player.rs.html @@ -1,4 +1,4 @@ -player.rs - source use zbus::{fdo, Result}; use crate::{ - LocalPlayerInterface, LocalRootInterface, LocalServer, LocalServerRunTask, LoopStatus, + LocalPlayerInterface, LocalRootInterface, LocalServer, LocalServerRunTask, LoopStatus, Metadata, PlaybackRate, PlaybackStatus, Property, Signal, Time, TrackId, Volume, }; @@ -1134,11 +1134,11 @@

Files

Player { server: self .server - .borrow() - .as_ref() - .expect("server must be set up") - .upgrade() - .expect("server must not be dropped"), + .borrow() + .as_ref() + .expect("server must be set up") + .upgrade() + .expect("server must not be dropped"), } } } @@ -1162,11 +1162,11 @@

Files

} async fn can_quit(&self) -> fdo::Result<bool> { - Ok(self.can_quit.get()) + Ok(self.can_quit.get()) } async fn fullscreen(&self) -> fdo::Result<bool> { - Ok(self.fullscreen.get()) + Ok(self.fullscreen.get()) } async fn set_fullscreen(&self, fullscreen: bool) -> Result<()> { @@ -1178,31 +1178,31 @@

Files

} async fn can_set_fullscreen(&self) -> fdo::Result<bool> { - Ok(self.can_set_fullscreen.get()) + Ok(self.can_set_fullscreen.get()) } async fn can_raise(&self) -> fdo::Result<bool> { - Ok(self.can_raise.get()) + Ok(self.can_raise.get()) } async fn has_track_list(&self) -> fdo::Result<bool> { - Ok(self.has_track_list.get()) + Ok(self.has_track_list.get()) } async fn identity(&self) -> fdo::Result<String> { - Ok(self.identity.borrow().clone()) + Ok(self.identity.borrow().clone()) } async fn desktop_entry(&self) -> fdo::Result<String> { - Ok(self.desktop_entry.borrow().clone()) + Ok(self.desktop_entry.borrow().clone()) } async fn supported_uri_schemes(&self) -> fdo::Result<Vec<String>> { - Ok(self.supported_uri_schemes.borrow().clone()) + Ok(self.supported_uri_schemes.borrow().clone()) } async fn supported_mime_types(&self) -> fdo::Result<Vec<String>> { - Ok(self.supported_mime_types.borrow().clone()) + Ok(self.supported_mime_types.borrow().clone()) } } @@ -1281,11 +1281,11 @@

Files

} async fn playback_status(&self) -> fdo::Result<PlaybackStatus> { - Ok(self.playback_status.get()) + Ok(self.playback_status.get()) } async fn loop_status(&self) -> fdo::Result<LoopStatus> { - Ok(self.loop_status.get()) + Ok(self.loop_status.get()) } async fn set_loop_status(&self, loop_status: LoopStatus) -> Result<()> { @@ -1297,7 +1297,7 @@

Files

} async fn rate(&self) -> fdo::Result<PlaybackRate> { - Ok(self.rate.get()) + Ok(self.rate.get()) } async fn set_rate(&self, rate: PlaybackRate) -> Result<()> { @@ -1309,7 +1309,7 @@

Files

} async fn shuffle(&self) -> fdo::Result<bool> { - Ok(self.shuffle.get()) + Ok(self.shuffle.get()) } async fn set_shuffle(&self, shuffle: bool) -> Result<()> { @@ -1321,11 +1321,11 @@

Files

} async fn metadata(&self) -> fdo::Result<Metadata> { - Ok(self.metadata.borrow().clone()) + Ok(self.metadata.borrow().clone()) } async fn volume(&self) -> fdo::Result<Volume> { - Ok(self.volume.get()) + Ok(self.volume.get()) } async fn set_volume(&self, volume: Volume) -> Result<()> { @@ -1337,60 +1337,60 @@

Files

} async fn position(&self) -> fdo::Result<Time> { - Ok(self.position.get()) + Ok(self.position.get()) } async fn minimum_rate(&self) -> fdo::Result<PlaybackRate> { - Ok(self.minimum_rate.get()) + Ok(self.minimum_rate.get()) } async fn maximum_rate(&self) -> fdo::Result<PlaybackRate> { - Ok(self.maximum_rate.get()) + Ok(self.maximum_rate.get()) } async fn can_go_next(&self) -> fdo::Result<bool> { - Ok(self.can_go_next.get()) + Ok(self.can_go_next.get()) } async fn can_go_previous(&self) -> fdo::Result<bool> { - Ok(self.can_go_previous.get()) + Ok(self.can_go_previous.get()) } async fn can_play(&self) -> fdo::Result<bool> { - Ok(self.can_play.get()) + Ok(self.can_play.get()) } async fn can_pause(&self) -> fdo::Result<bool> { - Ok(self.can_pause.get()) + Ok(self.can_pause.get()) } async fn can_seek(&self) -> fdo::Result<bool> { - Ok(self.can_seek.get()) + Ok(self.can_seek.get()) } async fn can_control(&self) -> fdo::Result<bool> { - Ok(self.can_control.get()) + Ok(self.can_control.get()) } } impl Player { pub fn builder(bus_name_suffix: &str) -> PlayerBuilder { PlayerBuilder { - bus_name_suffix: bus_name_suffix.to_string(), + bus_name_suffix: bus_name_suffix.to_string(), can_quit: false, fullscreen: false, can_set_fullscreen: false, can_raise: false, has_track_list: false, - identity: String::new(), - desktop_entry: String::new(), - supported_uri_schemes: Vec::new(), - supported_mime_types: Vec::new(), + identity: String::new(), + desktop_entry: String::new(), + supported_uri_schemes: Vec::new(), + supported_mime_types: Vec::new(), playback_status: PlaybackStatus::Stopped, loop_status: LoopStatus::None, rate: 1.0, shuffle: false, - metadata: Metadata::new(), + metadata: Metadata::new(), volume: 1.0, position: Time::ZERO, minimum_rate: 1.0, @@ -1410,28 +1410,28 @@

Files

/// The task must be awaited as soon as possible after creating the player. /// /// The returned task is no-op if the player's server has been ran before. - pub fn run(&self) -> LocalServerRunTask { - self.server.run() + pub fn run(&self) -> LocalServerRunTask { + self.server.run() } pub fn connect_raise(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().raise_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().raise_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_quit(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().quit_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().quit_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_set_fullscreen(&self, cb: impl Fn(&Self, bool) + 'static) { self.server - .imp() + .imp() .set_fullscreen_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn can_quit(&self) -> bool { - self.server.imp().can_quit.get() + self.server.imp().can_quit.get() } pub async fn set_can_quit(&self, can_quit: bool) -> Result<()> { @@ -1446,7 +1446,7 @@

Files

} pub fn fullscreen(&self) -> bool { - self.server.imp().fullscreen.get() + self.server.imp().fullscreen.get() } pub async fn set_fullscreen(&self, fullscreen: bool) -> Result<()> { @@ -1461,7 +1461,7 @@

Files

} pub fn can_set_fullscreen(&self) -> bool { - self.server.imp().can_set_fullscreen.get() + self.server.imp().can_set_fullscreen.get() } pub async fn set_can_set_fullscreen(&self, can_set_fullscreen: bool) -> Result<()> { @@ -1476,7 +1476,7 @@

Files

} pub fn can_raise(&self) -> bool { - self.server.imp().can_raise.get() + self.server.imp().can_raise.get() } pub async fn set_can_raise(&self, can_raise: bool) -> Result<()> { @@ -1491,7 +1491,7 @@

Files

} pub fn has_track_list(&self) -> bool { - self.server.imp().has_track_list.get() + self.server.imp().has_track_list.get() } pub async fn set_has_track_list(&self, has_track_list: bool) -> Result<()> { @@ -1506,7 +1506,7 @@

Files

} pub fn identity(&self) -> Ref<'_, String> { - self.server.imp().identity.borrow() + self.server.imp().identity.borrow() } pub async fn set_identity(&self, identity: impl Into<String>) -> Result<()> { @@ -1523,7 +1523,7 @@

Files

} pub fn desktop_entry(&self) -> Ref<'_, String> { - self.server.imp().desktop_entry.borrow() + self.server.imp().desktop_entry.borrow() } pub async fn set_desktop_entry(&self, desktop_entry: impl Into<String>) -> Result<()> { @@ -1543,7 +1543,7 @@

Files

} pub fn supported_uri_schemes(&self) -> Ref<'_, Vec<String>> { - self.server.imp().supported_uri_schemes.borrow() + self.server.imp().supported_uri_schemes.borrow() } pub async fn set_supported_uri_schemes( @@ -1569,7 +1569,7 @@

Files

} pub fn supported_mime_types(&self) -> Ref<'_, Vec<String>> { - self.server.imp().supported_mime_types.borrow() + self.server.imp().supported_mime_types.borrow() } pub async fn set_supported_mime_types( @@ -1595,87 +1595,87 @@

Files

} pub fn connect_next(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().next_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().next_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_previous(&self, cb: impl Fn(&Self) + 'static) { self.server - .imp() + .imp() .previous_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_pause(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().pause_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().pause_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_play_pause(&self, cb: impl Fn(&Self) + 'static) { self.server - .imp() + .imp() .play_pause_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_stop(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().stop_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().stop_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_play(&self, cb: impl Fn(&Self) + 'static) { - self.server.imp().play_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().play_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_seek(&self, cb: impl Fn(&Self, Time) + 'static) { - self.server.imp().seek_cbs.borrow_mut().push(Box::new(cb)); + self.server.imp().seek_cbs.borrow_mut().push(Box::new(cb)); } pub fn connect_set_position(&self, cb: impl Fn(&Self, &TrackId, Time) + 'static) { self.server - .imp() + .imp() .set_position_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_open_uri(&self, cb: impl Fn(&Self, &str) + 'static) { self.server - .imp() + .imp() .open_uri_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_set_loop_status(&self, cb: impl Fn(&Self, LoopStatus) + 'static) { self.server - .imp() + .imp() .set_loop_status_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_set_rate(&self, cb: impl Fn(&Self, PlaybackRate) + 'static) { self.server - .imp() + .imp() .set_rate_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_set_shuffle(&self, cb: impl Fn(&Self, bool) + 'static) { self.server - .imp() + .imp() .set_shuffle_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub fn connect_set_volume(&self, cb: impl Fn(&Self, Volume) + 'static) { self.server - .imp() + .imp() .set_volume_cbs - .borrow_mut() - .push(Box::new(cb)); + .borrow_mut() + .push(Box::new(cb)); } pub async fn seeked(&self, position: Time) -> Result<()> { @@ -1683,7 +1683,7 @@

Files

} pub fn playback_status(&self) -> PlaybackStatus { - self.server.imp().playback_status.get() + self.server.imp().playback_status.get() } pub async fn set_playback_status(&self, playback_status: PlaybackStatus) -> Result<()> { @@ -1698,7 +1698,7 @@

Files

} pub fn loop_status(&self) -> LoopStatus { - self.server.imp().loop_status.get() + self.server.imp().loop_status.get() } pub async fn set_loop_status(&self, loop_status: LoopStatus) -> Result<()> { @@ -1713,7 +1713,7 @@

Files

} pub fn rate(&self) -> PlaybackRate { - self.server.imp().rate.get() + self.server.imp().rate.get() } pub async fn set_rate(&self, rate: PlaybackRate) -> Result<()> { @@ -1726,7 +1726,7 @@

Files

} pub fn shuffle(&self) -> bool { - self.server.imp().shuffle.get() + self.server.imp().shuffle.get() } pub async fn set_shuffle(&self, shuffle: bool) -> Result<()> { @@ -1741,7 +1741,7 @@

Files

} pub fn metadata(&self) -> Ref<'_, Metadata> { - self.server.imp().metadata.borrow() + self.server.imp().metadata.borrow() } pub async fn set_metadata(&self, metadata: Metadata) -> Result<()> { @@ -1756,7 +1756,7 @@

Files

} pub fn volume(&self) -> Volume { - self.server.imp().volume.get() + self.server.imp().volume.get() } pub async fn set_volume(&self, volume: Volume) -> Result<()> { @@ -1771,16 +1771,16 @@

Files

} pub fn position(&self) -> Time { - self.server.imp().position.get() + self.server.imp().position.get() } /// This does not emit `PropertiesChanged` signal. pub fn set_position(&self, position: Time) { - self.server.imp().position.set(position); + self.server.imp().position.set(position); } pub fn minimum_rate(&self) -> PlaybackRate { - self.server.imp().minimum_rate.get() + self.server.imp().minimum_rate.get() } pub async fn set_minimum_rate(&self, minimum_rate: PlaybackRate) -> Result<()> { @@ -1795,7 +1795,7 @@

Files

} pub fn maximum_rate(&self) -> PlaybackRate { - self.server.imp().maximum_rate.get() + self.server.imp().maximum_rate.get() } pub async fn set_maximum_rate(&self, maximum_rate: PlaybackRate) -> Result<()> { @@ -1810,7 +1810,7 @@

Files

} pub fn can_go_next(&self) -> bool { - self.server.imp().can_go_next.get() + self.server.imp().can_go_next.get() } pub async fn set_can_go_next(&self, can_go_next: bool) -> Result<()> { @@ -1825,7 +1825,7 @@

Files

} pub fn can_go_previous(&self) -> bool { - self.server.imp().can_go_previous.get() + self.server.imp().can_go_previous.get() } pub async fn set_can_go_previous(&self, can_go_previous: bool) -> Result<()> { @@ -1840,7 +1840,7 @@

Files

} pub fn can_play(&self) -> bool { - self.server.imp().can_play.get() + self.server.imp().can_play.get() } pub async fn set_can_play(&self, can_play: bool) -> Result<()> { @@ -1855,7 +1855,7 @@

Files

} pub fn can_pause(&self) -> bool { - self.server.imp().can_pause.get() + self.server.imp().can_pause.get() } pub async fn set_can_pause(&self, can_pause: bool) -> Result<()> { @@ -1870,7 +1870,7 @@

Files

} pub fn can_seek(&self) -> bool { - self.server.imp().can_seek.get() + self.server.imp().can_seek.get() } pub async fn set_can_seek(&self, can_seek: bool) -> Result<()> { @@ -1886,7 +1886,7 @@

Files

/// This can only be set on construct. pub fn can_control(&self) -> bool { - self.server.imp().can_control.get() + self.server.imp().can_control.get() } } @@ -1948,12 +1948,12 @@

Files

} pub fn identity(mut self, identity: impl Into<String>) -> Self { - self.identity = identity.into(); + self.identity = identity.into(); self } pub fn desktop_entry(mut self, desktop_entry: impl Into<String>) -> Self { - self.desktop_entry = desktop_entry.into(); + self.desktop_entry = desktop_entry.into(); self } @@ -1962,9 +1962,9 @@

Files

supported_uri_schemes: impl IntoIterator<Item = impl Into<String>>, ) -> Self { self.supported_uri_schemes = supported_uri_schemes - .into_iter() - .map(|i| i.into()) - .collect(); + .into_iter() + .map(|i| i.into()) + .collect(); self } @@ -1972,7 +1972,7 @@

Files

mut self, supported_mime_types: impl IntoIterator<Item = impl Into<String>>, ) -> Self { - self.supported_mime_types = supported_mime_types.into_iter().map(|i| i.into()).collect(); + self.supported_mime_types = supported_mime_types.into_iter().map(|i| i.into()).collect(); self } diff --git a/src/mpris_server/playlist.rs.html b/src/mpris_server/playlist.rs.html index ddfc0c6..45ba003 100644 --- a/src/mpris_server/playlist.rs.html +++ b/src/mpris_server/playlist.rs.html @@ -1,4 +1,4 @@ -playlist.rs - source impl<'a> From<Playlist> for Value<'a> { fn from(p: Playlist) -> Self { - Value::from((p.id, p.name, p.icon)) + Value::from((p.id, p.name, p.icon)) } } @@ -137,9 +137,9 @@

Files

None => Self { valid: false, playlist: Playlist { - id: ObjectPath::from_static_str_unchecked("/").into(), - name: String::new(), - icon: Uri::new(), + id: ObjectPath::from_static_str_unchecked("/").into(), + name: String::new(), + icon: Uri::new(), }, }, } @@ -148,7 +148,7 @@

Files

impl<'a> From<MaybePlaylist> for Value<'a> { fn from(mp: MaybePlaylist) -> Self { - Value::from((mp.valid, mp.playlist)) + Value::from((mp.valid, mp.playlist)) } } diff --git a/src/mpris_server/playlist_ordering.rs.html b/src/mpris_server/playlist_ordering.rs.html index 8e2c0b2..78a9d73 100644 --- a/src/mpris_server/playlist_ordering.rs.html +++ b/src/mpris_server/playlist_ordering.rs.html @@ -1,4 +1,4 @@ -playlist_ordering.rs - source impl fmt::Display for PlaylistOrdering { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.write_str(self.as_str()) + f.write_str(self.as_str()) } } diff --git a/src/mpris_server/property.rs.html b/src/mpris_server/property.rs.html index cd9596a..f14dfe3 100644 --- a/src/mpris_server/property.rs.html +++ b/src/mpris_server/property.rs.html @@ -1,4 +1,4 @@ -property.rs - source imp: Arc<T>, } -#[dbus_interface(name = "org.mpris.MediaPlayer2")] +#[zbus::interface(name = "org.mpris.MediaPlayer2")] impl<T> RawRootInterface<T> where T: RootInterface + 'static, @@ -779,52 +779,52 @@

Files

self.imp.quit().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_quit(&self) -> fdo::Result<bool> { self.imp.can_quit().await } - #[dbus_interface(property)] + #[zbus(property)] async fn fullscreen(&self) -> fdo::Result<bool> { self.imp.fullscreen().await } - #[dbus_interface(property)] + #[zbus(property)] async fn set_fullscreen(&self, fullscreen: bool) -> Result<()> { self.imp.set_fullscreen(fullscreen).await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_set_fullscreen(&self) -> fdo::Result<bool> { self.imp.can_set_fullscreen().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_raise(&self) -> fdo::Result<bool> { self.imp.can_raise().await } - #[dbus_interface(property)] + #[zbus(property)] async fn has_track_list(&self) -> fdo::Result<bool> { self.imp.has_track_list().await } - #[dbus_interface(property)] + #[zbus(property)] async fn identity(&self) -> fdo::Result<String> { self.imp.identity().await } - #[dbus_interface(property)] + #[zbus(property)] async fn desktop_entry(&self) -> fdo::Result<String> { self.imp.desktop_entry().await } - #[dbus_interface(property)] + #[zbus(property)] async fn supported_uri_schemes(&self) -> fdo::Result<Vec<String>> { self.imp.supported_uri_schemes().await } - #[dbus_interface(property)] + #[zbus(property)] async fn supported_mime_types(&self) -> fdo::Result<Vec<String>> { self.imp.supported_mime_types().await } @@ -834,7 +834,7 @@

Files

imp: Arc<T>, } -#[dbus_interface(name = "org.mpris.MediaPlayer2.Player")] +#[zbus::interface(name = "org.mpris.MediaPlayer2.Player")] impl<T> RawPlayerInterface<T> where T: PlayerInterface + 'static, @@ -875,100 +875,100 @@

Files

self.imp.open_uri(uri).await } - #[dbus_interface(signal)] + #[zbus(signal)] async fn seeked(ctxt: &SignalContext<'_>, position: Time) -> Result<()>; - #[dbus_interface(property)] + #[zbus(property)] async fn playback_status(&self) -> fdo::Result<PlaybackStatus> { self.imp.playback_status().await } - #[dbus_interface(property)] + #[zbus(property)] async fn loop_status(&self) -> fdo::Result<LoopStatus> { self.imp.loop_status().await } - #[dbus_interface(property)] + #[zbus(property)] async fn set_loop_status(&self, loop_status: LoopStatus) -> Result<()> { self.imp.set_loop_status(loop_status).await } - #[dbus_interface(property)] + #[zbus(property)] async fn rate(&self) -> fdo::Result<PlaybackRate> { self.imp.rate().await } - #[dbus_interface(property)] + #[zbus(property)] async fn set_rate(&self, rate: PlaybackRate) -> Result<()> { self.imp.set_rate(rate).await } - #[dbus_interface(property)] + #[zbus(property)] async fn shuffle(&self) -> fdo::Result<bool> { self.imp.shuffle().await } - #[dbus_interface(property)] + #[zbus(property)] async fn set_shuffle(&self, shuffle: bool) -> Result<()> { self.imp.set_shuffle(shuffle).await } - #[dbus_interface(property)] + #[zbus(property)] async fn metadata(&self) -> fdo::Result<Metadata> { self.imp.metadata().await } - #[dbus_interface(property)] + #[zbus(property)] async fn volume(&self) -> fdo::Result<Volume> { self.imp.volume().await } - #[dbus_interface(property)] + #[zbus(property)] async fn set_volume(&self, volume: Volume) -> Result<()> { self.imp.set_volume(volume).await } - #[dbus_interface(property)] + #[zbus(property)] async fn position(&self) -> fdo::Result<Time> { self.imp.position().await } - #[dbus_interface(property)] + #[zbus(property)] async fn minimum_rate(&self) -> fdo::Result<PlaybackRate> { self.imp.minimum_rate().await } - #[dbus_interface(property)] + #[zbus(property)] async fn maximum_rate(&self) -> fdo::Result<PlaybackRate> { self.imp.maximum_rate().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_go_next(&self) -> fdo::Result<bool> { self.imp.can_go_next().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_go_previous(&self) -> fdo::Result<bool> { self.imp.can_go_previous().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_play(&self) -> fdo::Result<bool> { self.imp.can_play().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_pause(&self) -> fdo::Result<bool> { self.imp.can_pause().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_seek(&self) -> fdo::Result<bool> { self.imp.can_seek().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_control(&self) -> fdo::Result<bool> { self.imp.can_control().await } @@ -978,7 +978,7 @@

Files

imp: Arc<T>, } -#[dbus_interface(name = "org.mpris.MediaPlayer2.TrackList")] +#[zbus::interface(name = "org.mpris.MediaPlayer2.TrackList")] impl<T> RawTrackListInterface<T> where T: TrackListInterface + 'static, @@ -1004,36 +1004,36 @@

Files

self.imp.go_to(track_id).await } - #[dbus_interface(signal)] + #[zbus(signal)] async fn track_list_replaced( ctxt: &SignalContext<'_>, tracks: Vec<TrackId>, current_track: TrackId, ) -> Result<()>; - #[dbus_interface(signal)] + #[zbus(signal)] async fn track_added( ctxt: &SignalContext<'_>, metadata: Metadata, after_track: TrackId, ) -> Result<()>; - #[dbus_interface(signal)] + #[zbus(signal)] async fn track_removed(ctxt: &SignalContext<'_>, track_id: TrackId) -> Result<()>; - #[dbus_interface(signal)] + #[zbus(signal)] async fn track_metadata_changed( ctxt: &SignalContext<'_>, track_id: TrackId, metadata: Metadata, ) -> Result<()>; - #[dbus_interface(property)] + #[zbus(property)] async fn tracks(&self) -> fdo::Result<Vec<TrackId>> { self.imp.tracks().await } - #[dbus_interface(property)] + #[zbus(property)] async fn can_edit_tracks(&self) -> fdo::Result<bool> { self.imp.can_edit_tracks().await } @@ -1043,7 +1043,7 @@

Files

imp: Arc<T>, } -#[dbus_interface(name = "org.mpris.MediaPlayer2.Playlists")] +#[zbus::interface(name = "org.mpris.MediaPlayer2.Playlists")] impl<T> RawPlaylistsInterface<T> where T: PlaylistsInterface + 'static, @@ -1064,20 +1064,20 @@

Files

.await } - #[dbus_interface(signal)] + #[zbus(signal)] async fn playlist_changed(ctxt: &SignalContext<'_>, playlist: Playlist) -> Result<()>; - #[dbus_interface(property)] + #[zbus(property)] async fn playlist_count(&self) -> fdo::Result<u32> { self.imp.playlist_count().await } - #[dbus_interface(property)] + #[zbus(property)] async fn orderings(&self) -> fdo::Result<Vec<PlaylistOrdering>> { self.imp.orderings().await } - #[dbus_interface(property)] + #[zbus(property)] async fn active_playlist(&self) -> fdo::Result<MaybePlaylist> { self.imp.active_playlist().await.map(MaybePlaylist::from) } @@ -1100,7 +1100,7 @@

Files

impl<T> fmt::Debug for Server<T> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - f.debug_struct("Server").finish() + f.debug_struct("Server").finish() } } diff --git a/src/mpris_server/signal.rs.html b/src/mpris_server/signal.rs.html index 5bb0284..101cf40 100644 --- a/src/mpris_server/signal.rs.html +++ b/src/mpris_server/signal.rs.html @@ -1,4 +1,4 @@ -signal.rs - source /// ```
#[inline] pub const fn from_millis(millis: i64) -> Self { - match millis.checked_mul(1000) { + match millis.checked_mul(1000) { Some(micros) => Self::from_micros(micros), None => panic!("overflow when creating time from milliseconds"), } @@ -586,7 +586,7 @@

Files

/// ```
#[inline] pub const fn abs(&self) -> Self { - Self(self.0.abs()) + Self(self.0.abs()) } /// Checked `Time` addition. Computes `self + other`, returning [`None`] @@ -604,7 +604,7 @@

Files

/// ```
#[inline] pub const fn checked_add(self, other: Self) -> Option<Self> { - match self.0.checked_add(other.0) { + match self.0.checked_add(other.0) { Some(inner) => Some(Self(inner)), None => None, } @@ -625,7 +625,7 @@

Files

/// ```
#[inline] pub const fn checked_sub(self, other: Self) -> Option<Self> { - match self.0.checked_sub(other.0) { + match self.0.checked_sub(other.0) { Some(inner) => Some(Self(inner)), None => None, } @@ -679,7 +679,7 @@

Files

#[inline] fn add(self, other: Self) -> Self { - self.checked_add(other).expect("overflow when adding times") + self.checked_add(other).expect("overflow when adding times") } } @@ -695,7 +695,7 @@

Files

#[inline] fn sub(self, other: Self) -> Self { self.checked_sub(other) - .expect("overflow when subtracting times") + .expect("overflow when subtracting times") } } @@ -707,7 +707,7 @@

Files

impl<'a> From<Time> for Value<'a> { fn from(time: Time) -> Self { - Value::from(time.0) + Value::from(time.0) } } @@ -715,7 +715,7 @@

Files

type Error = Error; fn try_from(value: Value<'_>) -> Result<Self, Self::Error> { - i64::try_from(value).map(Self) + i64::try_from(value).map(Self) } } diff --git a/src/mpris_server/track_id.rs.html b/src/mpris_server/track_id.rs.html index a44ea58..fc1c299 100644 --- a/src/mpris_server/track_id.rs.html +++ b/src/mpris_server/track_id.rs.html @@ -1,4 +1,4 @@ -track_id.rs - source 115 116 117 +118 +119 +120 +121 +122 +123 +124 +125 +126
use std::{fmt, ops};
 
 use serde::{de, Deserialize, Deserializer, Serialize};
-use zbus::zvariant::{Error, ObjectPath, Result, Type, Value};
+use zbus::zvariant::{serialized::Format, Basic, Error, ObjectPath, Result, Type, Value};
 
 /// Unique track identifier.
 ///
@@ -162,35 +171,44 @@ 

Files

} } +impl Basic for TrackId { + const SIGNATURE_CHAR: char = ObjectPath::SIGNATURE_CHAR; + const SIGNATURE_STR: &'static str = ObjectPath::SIGNATURE_STR; + + fn alignment(format: Format) -> usize { + ObjectPath::alignment(format) + } +} + impl ops::Deref for TrackId { type Target = ObjectPath<'static>; fn deref(&self) -> &Self::Target { - &self.0 + &self.0 } } impl From<TrackId> for ObjectPath<'static> { fn from(o: TrackId) -> Self { - o.into_inner() + o.into_inner() } } -impl From<TrackId> for Value<'static> { +impl From<TrackId> for Value<'_> { fn from(o: TrackId) -> Self { - o.into_inner().into() + o.into_inner().into() } } impl<'unowned, 'owned: 'unowned> From<&'owned TrackId> for ObjectPath<'unowned> { fn from(o: &'owned TrackId) -> Self { - ObjectPath::from_str_unchecked(o.as_str()) + ObjectPath::from_str_unchecked(o.as_str()) } } impl<'a> From<ObjectPath<'a>> for TrackId { fn from(o: ObjectPath<'a>) -> Self { - TrackId(o.into_owned()) + TrackId(o.into_owned()) } } @@ -198,7 +216,7 @@

Files

type Error = Error; fn try_from(value: &str) -> Result<Self> { - Ok(Self::from(ObjectPath::try_from(value)?)) + Ok(Self::from(ObjectPath::try_from(value)?)) } } @@ -206,7 +224,7 @@

Files

type Error = Error; fn try_from(value: String) -> Result<Self> { - Ok(Self::from(ObjectPath::try_from(value)?)) + Ok(Self::from(ObjectPath::try_from(value)?)) } } @@ -214,7 +232,7 @@

Files

type Error = Error; fn try_from(value: Value<'_>) -> Result<Self> { - ObjectPath::try_from(value).map(|o| Self(o.to_owned())) + ObjectPath::try_from(value).map(|o| Self(o.to_owned())) } } @@ -223,15 +241,15 @@

Files

where D: Deserializer<'de>, { - String::deserialize(deserializer) - .and_then(|s| ObjectPath::try_from(s).map_err(|e| de::Error::custom(e.to_string()))) - .map(Self) + String::deserialize(deserializer) + .and_then(|s| ObjectPath::try_from(s).map_err(|e| de::Error::custom(e.to_string()))) + .map(Self) } } impl fmt::Display for TrackId { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fmt::Display::fmt(&self.as_str(), f) + fmt::Display::fmt(&self.as_str(), f) } }
\ No newline at end of file diff --git a/static.files/rustdoc-b1a3e7f8283b8434.css b/static.files/rustdoc-5bc39a1768837dd0.css similarity index 90% rename from static.files/rustdoc-b1a3e7f8283b8434.css rename to static.files/rustdoc-5bc39a1768837dd0.css index 754a408..175164e 100644 --- a/static.files/rustdoc-b1a3e7f8283b8434.css +++ b/static.files/rustdoc-5bc39a1768837dd0.css @@ -1,4 +1,4 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;margin-right:0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 -16px 0 -16px;text-align:center;}.sidebar-crate h2 a{display:block;margin:0 calc(-24px + 0.25rem) 0 -0.5rem;padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.5rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;margin-top:calc((-16px + 0.57rem ) / 2 );}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:5px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml,h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;margin-right:0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 -16px 0 -16px;text-align:center;}.sidebar-crate h2 a{display:block;margin:0 calc(-24px + 0.25rem) 0 -0.2rem;padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:5px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ diff --git a/static.files/storage-4c98445ec4002617.js b/static.files/storage-4c98445ec4002617.js new file mode 100644 index 0000000..b378b85 --- /dev/null +++ b/static.files/storage-4c98445ec4002617.js @@ -0,0 +1 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px")}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px")}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}}) \ No newline at end of file diff --git a/static.files/storage-f2adc0d6ca4d09fb.js b/static.files/storage-f2adc0d6ca4d09fb.js deleted file mode 100644 index 1723360..0000000 --- a/static.files/storage-f2adc0d6ca4d09fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px")}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px")}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}}) \ No newline at end of file diff --git a/trait.impl/core/clone/trait.Clone.js b/trait.impl/core/clone/trait.Clone.js index 0696dbe..4ba13c5 100644 --- a/trait.impl/core/clone/trait.Clone.js +++ b/trait.impl/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Clone for PlaylistOrdering"],["impl Clone for PlaylistsProperty"],["impl Clone for TrackListProperty"],["impl Clone for Time"],["impl Clone for Metadata"],["impl Clone for Property"],["impl Clone for Playlist"],["impl Clone for MetadataBuilder"],["impl Clone for PlaybackStatus"],["impl Clone for LoopStatus"],["impl Clone for TrackId"]] +"mpris_server":[["impl Clone for LoopStatus"],["impl Clone for PlaybackStatus"],["impl Clone for PlaylistOrdering"],["impl Clone for PlaylistsProperty"],["impl Clone for Property"],["impl Clone for TrackListProperty"],["impl Clone for MetadataBuilder"],["impl Clone for Metadata"],["impl Clone for Playlist"],["impl Clone for Time"],["impl Clone for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.Eq.js b/trait.impl/core/cmp/trait.Eq.js index beeb229..a183b24 100644 --- a/trait.impl/core/cmp/trait.Eq.js +++ b/trait.impl/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Eq for PlaybackStatus"],["impl Eq for LoopStatus"],["impl Eq for TrackId"],["impl Eq for Playlist"],["impl Eq for TrackListProperty"],["impl Eq for PlaylistsProperty"],["impl Eq for PlaylistOrdering"],["impl Eq for Time"]] +"mpris_server":[["impl Eq for LoopStatus"],["impl Eq for PlaybackStatus"],["impl Eq for PlaylistOrdering"],["impl Eq for PlaylistsProperty"],["impl Eq for TrackListProperty"],["impl Eq for Playlist"],["impl Eq for Time"],["impl Eq for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.PartialEq.js b/trait.impl/core/cmp/trait.PartialEq.js index 87b57e6..7715d99 100644 --- a/trait.impl/core/cmp/trait.PartialEq.js +++ b/trait.impl/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl PartialEq for Metadata"],["impl PartialEq for PlaylistsProperty"],["impl PartialEq for PlaylistOrdering"],["impl PartialEq for TrackListProperty"],["impl PartialEq for Playlist"],["impl PartialEq for TrackId"],["impl PartialEq for LoopStatus"],["impl PartialEq for PlaybackStatus"],["impl PartialEq for Time"],["impl PartialEq for Property"]] +"mpris_server":[["impl PartialEq for LoopStatus"],["impl PartialEq for PlaybackStatus"],["impl PartialEq for PlaylistOrdering"],["impl PartialEq for PlaylistsProperty"],["impl PartialEq for Property"],["impl PartialEq for TrackListProperty"],["impl PartialEq for Metadata"],["impl PartialEq for Playlist"],["impl PartialEq for Time"],["impl PartialEq for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/convert/trait.From.js b/trait.impl/core/convert/trait.From.js index 9bca071..c58e359 100644 --- a/trait.impl/core/convert/trait.From.js +++ b/trait.impl/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl<'a> From<ObjectPath<'a>> for TrackId"],["impl<'unowned, 'owned: 'unowned> From<&'owned TrackId> for ObjectPath<'unowned>"],["impl<'a> From<Time> for Value<'a>"],["impl From<TrackId> for ObjectPath<'static>"],["impl<'a> From<PlaylistOrdering> for Value<'a>"],["impl From<TrackId> for Value<'static>"],["impl<'a> From<Playlist> for Value<'a>"],["impl<'a> From<PlaybackStatus> for Value<'a>"],["impl<'a> From<LoopStatus> for Value<'a>"],["impl<'a> From<Metadata> for Value<'a>"]] +"mpris_server":[["impl From<TrackId> for ObjectPath<'static>"],["impl From<TrackId> for Value<'_>"],["impl<'a> From<LoopStatus> for Value<'a>"],["impl<'a> From<PlaybackStatus> for Value<'a>"],["impl<'a> From<PlaylistOrdering> for Value<'a>"],["impl<'a> From<Metadata> for Value<'a>"],["impl<'a> From<Playlist> for Value<'a>"],["impl<'a> From<Time> for Value<'a>"],["impl<'a> From<ObjectPath<'a>> for TrackId"],["impl<'unowned, 'owned: 'unowned> From<&'owned TrackId> for ObjectPath<'unowned>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/convert/trait.TryFrom.js b/trait.impl/core/convert/trait.TryFrom.js index a114860..5c154c4 100644 --- a/trait.impl/core/convert/trait.TryFrom.js +++ b/trait.impl/core/convert/trait.TryFrom.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl<'a> TryFrom<Value<'a>> for LoopStatus"],["impl TryFrom<Value<'_>> for TrackId"],["impl TryFrom<Value<'_>> for Time"],["impl TryFrom<String> for TrackId"],["impl TryFrom<&str> for TrackId"]] +"mpris_server":[["impl TryFrom<&str> for TrackId"],["impl TryFrom<String> for TrackId"],["impl TryFrom<Value<'_>> for Time"],["impl TryFrom<Value<'_>> for TrackId"],["impl<'a> TryFrom<Value<'a>> for LoopStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/default/trait.Default.js b/trait.impl/core/default/trait.Default.js index 5648359..b5b46dc 100644 --- a/trait.impl/core/default/trait.Default.js +++ b/trait.impl/core/default/trait.Default.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Default for TrackId"],["impl Default for Time"],["impl Default for Metadata"],["impl Default for MetadataBuilder"]] +"mpris_server":[["impl Default for MetadataBuilder"],["impl Default for Metadata"],["impl Default for Time"],["impl Default for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/fmt/trait.Debug.js b/trait.impl/core/fmt/trait.Debug.js index c90246f..91c965c 100644 --- a/trait.impl/core/fmt/trait.Debug.js +++ b/trait.impl/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Debug for LocalServerRunTask"],["impl Debug for LoopStatus"],["impl Debug for Playlist"],["impl Debug for Metadata"],["impl Debug for PlaylistsSignal"],["impl Debug for PlaylistsProperty"],["impl Debug for TrackListProperty"],["impl Debug for MetadataBuilder"],["impl Debug for Signal"],["impl Debug for TrackId"],["impl<T> Debug for LocalServer<T>"],["impl Debug for Time"],["impl Debug for PlaybackStatus"],["impl<T> Debug for Server<T>"],["impl Debug for Property"],["impl Debug for Player"],["impl Debug for TrackListSignal"],["impl Debug for PlaylistOrdering"],["impl Debug for PlayerBuilder"]] +"mpris_server":[["impl Debug for LoopStatus"],["impl Debug for PlaybackStatus"],["impl Debug for PlaylistOrdering"],["impl Debug for PlaylistsProperty"],["impl Debug for PlaylistsSignal"],["impl Debug for Property"],["impl Debug for Signal"],["impl Debug for TrackListProperty"],["impl Debug for TrackListSignal"],["impl Debug for MetadataBuilder"],["impl Debug for PlayerBuilder"],["impl Debug for LocalServerRunTask"],["impl Debug for Metadata"],["impl Debug for Player"],["impl Debug for Playlist"],["impl Debug for Time"],["impl Debug for TrackId"],["impl<T> Debug for LocalServer<T>"],["impl<T> Debug for Server<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/fmt/trait.Display.js b/trait.impl/core/fmt/trait.Display.js index d5043c0..5b3b09e 100644 --- a/trait.impl/core/fmt/trait.Display.js +++ b/trait.impl/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Display for LoopStatus"],["impl Display for TrackId"],["impl Display for PlaybackStatus"],["impl Display for PlaylistOrdering"]] +"mpris_server":[["impl Display for LoopStatus"],["impl Display for PlaybackStatus"],["impl Display for PlaylistOrdering"],["impl Display for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/hash/trait.Hash.js b/trait.impl/core/hash/trait.Hash.js index 0f001c9..979d1ba 100644 --- a/trait.impl/core/hash/trait.Hash.js +++ b/trait.impl/core/hash/trait.Hash.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Hash for TrackId"],["impl Hash for Time"]] +"mpris_server":[["impl Hash for Time"],["impl Hash for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Copy.js b/trait.impl/core/marker/trait.Copy.js index d0c0fd4..999fa2c 100644 --- a/trait.impl/core/marker/trait.Copy.js +++ b/trait.impl/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Copy for PlaybackStatus"],["impl Copy for LoopStatus"],["impl Copy for PlaylistOrdering"],["impl Copy for Time"]] +"mpris_server":[["impl Copy for LoopStatus"],["impl Copy for PlaybackStatus"],["impl Copy for PlaylistOrdering"],["impl Copy for Time"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Freeze.js b/trait.impl/core/marker/trait.Freeze.js index 94639dd..80bf3db 100644 --- a/trait.impl/core/marker/trait.Freeze.js +++ b/trait.impl/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Freeze for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> !Freeze for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl Freeze for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Freeze for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Freeze for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Freeze for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Freeze for Player",1,["mpris_server::player::Player"]],["impl Freeze for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Freeze for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Freeze for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Freeze for Property",1,["mpris_server::property::Property"]],["impl Freeze for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Freeze for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> Freeze for Server<T>",1,["mpris_server::server::Server"]],["impl Freeze for Signal",1,["mpris_server::signal::Signal"]],["impl Freeze for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Freeze for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Freeze for Time",1,["mpris_server::time::Time"]],["impl Freeze for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl Freeze for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Freeze for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Freeze for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Freeze for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl Freeze for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Freeze for Property",1,["mpris_server::property::Property"]],["impl Freeze for Signal",1,["mpris_server::signal::Signal"]],["impl Freeze for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Freeze for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Freeze for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Freeze for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Freeze for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl Freeze for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Freeze for Player",1,["mpris_server::player::Player"]],["impl Freeze for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Freeze for Time",1,["mpris_server::time::Time"]],["impl Freeze for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> !Freeze for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> Freeze for Server<T>",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Send.js b/trait.impl/core/marker/trait.Send.js index 5a6d1f9..18f36ad 100644 --- a/trait.impl/core/marker/trait.Send.js +++ b/trait.impl/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl !Send for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> !Send for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl Send for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Send for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Send for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Send for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl !Send for Player",1,["mpris_server::player::Player"]],["impl Send for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Send for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Send for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Send for Property",1,["mpris_server::property::Property"]],["impl Send for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Send for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> Send for Server<T>
where\n T: Sync + Send,
",1,["mpris_server::server::Server"]],["impl Send for Signal",1,["mpris_server::signal::Signal"]],["impl Send for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Send for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Send for Time",1,["mpris_server::time::Time"]],["impl Send for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl !Send for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl !Send for Player",1,["mpris_server::player::Player"]],["impl Send for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Send for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Send for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Send for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl Send for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Send for Property",1,["mpris_server::property::Property"]],["impl Send for Signal",1,["mpris_server::signal::Signal"]],["impl Send for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Send for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Send for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Send for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Send for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Send for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Send for Time",1,["mpris_server::time::Time"]],["impl Send for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> !Send for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> Send for Server<T>
where\n T: Sync + Send,
",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.StructuralEq.js b/trait.impl/core/marker/trait.StructuralEq.js deleted file mode 100644 index 704592c..0000000 --- a/trait.impl/core/marker/trait.StructuralEq.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"mpris_server":[["impl StructuralEq for Time"],["impl StructuralEq for LoopStatus"],["impl StructuralEq for TrackListProperty"],["impl StructuralEq for PlaylistOrdering"],["impl StructuralEq for PlaylistsProperty"],["impl StructuralEq for PlaybackStatus"],["impl StructuralEq for TrackId"],["impl StructuralEq for Playlist"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.StructuralPartialEq.js b/trait.impl/core/marker/trait.StructuralPartialEq.js index 2f9616c..1bee67e 100644 --- a/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl StructuralPartialEq for TrackId"],["impl StructuralPartialEq for Property"],["impl StructuralPartialEq for Playlist"],["impl StructuralPartialEq for PlaybackStatus"],["impl StructuralPartialEq for TrackListProperty"],["impl StructuralPartialEq for LoopStatus"],["impl StructuralPartialEq for PlaylistsProperty"],["impl StructuralPartialEq for Metadata"],["impl StructuralPartialEq for Time"],["impl StructuralPartialEq for PlaylistOrdering"]] +"mpris_server":[["impl StructuralPartialEq for LoopStatus"],["impl StructuralPartialEq for PlaybackStatus"],["impl StructuralPartialEq for PlaylistOrdering"],["impl StructuralPartialEq for PlaylistsProperty"],["impl StructuralPartialEq for Property"],["impl StructuralPartialEq for TrackListProperty"],["impl StructuralPartialEq for Metadata"],["impl StructuralPartialEq for Playlist"],["impl StructuralPartialEq for Time"],["impl StructuralPartialEq for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Sync.js b/trait.impl/core/marker/trait.Sync.js index 9319eae..c5837e2 100644 --- a/trait.impl/core/marker/trait.Sync.js +++ b/trait.impl/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl !Sync for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> !Sync for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl Sync for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Sync for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Sync for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Sync for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl !Sync for Player",1,["mpris_server::player::Player"]],["impl Sync for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Sync for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Sync for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Sync for Property",1,["mpris_server::property::Property"]],["impl Sync for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Sync for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> Sync for Server<T>
where\n T: Sync + Send,
",1,["mpris_server::server::Server"]],["impl Sync for Signal",1,["mpris_server::signal::Signal"]],["impl Sync for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Sync for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Sync for Time",1,["mpris_server::time::Time"]],["impl Sync for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl !Sync for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl !Sync for Player",1,["mpris_server::player::Player"]],["impl Sync for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Sync for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Sync for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Sync for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl Sync for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Sync for Property",1,["mpris_server::property::Property"]],["impl Sync for Signal",1,["mpris_server::signal::Signal"]],["impl Sync for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Sync for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Sync for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Sync for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Sync for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Sync for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Sync for Time",1,["mpris_server::time::Time"]],["impl Sync for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> !Sync for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> Sync for Server<T>
where\n T: Sync + Send,
",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Unpin.js b/trait.impl/core/marker/trait.Unpin.js index db84c78..d5e19c5 100644 --- a/trait.impl/core/marker/trait.Unpin.js +++ b/trait.impl/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Unpin for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> Unpin for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl Unpin for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Unpin for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Unpin for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Unpin for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Unpin for Player",1,["mpris_server::player::Player"]],["impl Unpin for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Unpin for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Unpin for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Unpin for Property",1,["mpris_server::property::Property"]],["impl Unpin for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Unpin for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> Unpin for Server<T>",1,["mpris_server::server::Server"]],["impl Unpin for Signal",1,["mpris_server::signal::Signal"]],["impl Unpin for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Unpin for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Unpin for Time",1,["mpris_server::time::Time"]],["impl Unpin for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl Unpin for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl Unpin for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl Unpin for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl Unpin for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl Unpin for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl Unpin for Property",1,["mpris_server::property::Property"]],["impl Unpin for Signal",1,["mpris_server::signal::Signal"]],["impl Unpin for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl Unpin for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl Unpin for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl Unpin for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl Unpin for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl Unpin for Metadata",1,["mpris_server::metadata::Metadata"]],["impl Unpin for Player",1,["mpris_server::player::Player"]],["impl Unpin for Playlist",1,["mpris_server::playlist::Playlist"]],["impl Unpin for Time",1,["mpris_server::time::Time"]],["impl Unpin for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> Unpin for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> Unpin for Server<T>",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 3acb3a5..644a4f9 100644 --- a/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl !RefUnwindSafe for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> !RefUnwindSafe for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl RefUnwindSafe for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl RefUnwindSafe for Metadata",1,["mpris_server::metadata::Metadata"]],["impl RefUnwindSafe for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl RefUnwindSafe for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl !RefUnwindSafe for Player",1,["mpris_server::player::Player"]],["impl RefUnwindSafe for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl RefUnwindSafe for Playlist",1,["mpris_server::playlist::Playlist"]],["impl RefUnwindSafe for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl RefUnwindSafe for Property",1,["mpris_server::property::Property"]],["impl RefUnwindSafe for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl RefUnwindSafe for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> !RefUnwindSafe for Server<T>",1,["mpris_server::server::Server"]],["impl RefUnwindSafe for Signal",1,["mpris_server::signal::Signal"]],["impl RefUnwindSafe for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl RefUnwindSafe for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl RefUnwindSafe for Time",1,["mpris_server::time::Time"]],["impl RefUnwindSafe for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl !RefUnwindSafe for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl !RefUnwindSafe for Player",1,["mpris_server::player::Player"]],["impl RefUnwindSafe for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl RefUnwindSafe for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl RefUnwindSafe for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl RefUnwindSafe for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl RefUnwindSafe for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl RefUnwindSafe for Property",1,["mpris_server::property::Property"]],["impl RefUnwindSafe for Signal",1,["mpris_server::signal::Signal"]],["impl RefUnwindSafe for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl RefUnwindSafe for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl RefUnwindSafe for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl RefUnwindSafe for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl RefUnwindSafe for Metadata",1,["mpris_server::metadata::Metadata"]],["impl RefUnwindSafe for Playlist",1,["mpris_server::playlist::Playlist"]],["impl RefUnwindSafe for Time",1,["mpris_server::time::Time"]],["impl RefUnwindSafe for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> !RefUnwindSafe for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> !RefUnwindSafe for Server<T>",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index bcf5f92..962bb9d 100644 --- a/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl !UnwindSafe for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl<T> !UnwindSafe for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl UnwindSafe for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl UnwindSafe for Metadata",1,["mpris_server::metadata::Metadata"]],["impl UnwindSafe for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl UnwindSafe for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl !UnwindSafe for Player",1,["mpris_server::player::Player"]],["impl UnwindSafe for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl UnwindSafe for Playlist",1,["mpris_server::playlist::Playlist"]],["impl UnwindSafe for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl UnwindSafe for Property",1,["mpris_server::property::Property"]],["impl UnwindSafe for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl UnwindSafe for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl<T> !UnwindSafe for Server<T>",1,["mpris_server::server::Server"]],["impl UnwindSafe for Signal",1,["mpris_server::signal::Signal"]],["impl UnwindSafe for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl UnwindSafe for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl UnwindSafe for Time",1,["mpris_server::time::Time"]],["impl UnwindSafe for TrackId",1,["mpris_server::track_id::TrackId"]]] +"mpris_server":[["impl !UnwindSafe for LocalServerRunTask",1,["mpris_server::local_server::LocalServerRunTask"]],["impl !UnwindSafe for Player",1,["mpris_server::player::Player"]],["impl UnwindSafe for LoopStatus",1,["mpris_server::loop_status::LoopStatus"]],["impl UnwindSafe for PlaybackStatus",1,["mpris_server::playback_status::PlaybackStatus"]],["impl UnwindSafe for PlaylistOrdering",1,["mpris_server::playlist_ordering::PlaylistOrdering"]],["impl UnwindSafe for PlaylistsProperty",1,["mpris_server::property::PlaylistsProperty"]],["impl UnwindSafe for PlaylistsSignal",1,["mpris_server::signal::PlaylistsSignal"]],["impl UnwindSafe for Property",1,["mpris_server::property::Property"]],["impl UnwindSafe for Signal",1,["mpris_server::signal::Signal"]],["impl UnwindSafe for TrackListProperty",1,["mpris_server::property::TrackListProperty"]],["impl UnwindSafe for TrackListSignal",1,["mpris_server::signal::TrackListSignal"]],["impl UnwindSafe for MetadataBuilder",1,["mpris_server::metadata::MetadataBuilder"]],["impl UnwindSafe for PlayerBuilder",1,["mpris_server::player::PlayerBuilder"]],["impl UnwindSafe for Metadata",1,["mpris_server::metadata::Metadata"]],["impl UnwindSafe for Playlist",1,["mpris_server::playlist::Playlist"]],["impl UnwindSafe for Time",1,["mpris_server::time::Time"]],["impl UnwindSafe for TrackId",1,["mpris_server::track_id::TrackId"]],["impl<T> !UnwindSafe for LocalServer<T>",1,["mpris_server::local_server::LocalServer"]],["impl<T> !UnwindSafe for Server<T>",1,["mpris_server::server::Server"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/serde/de/trait.Deserialize.js b/trait.impl/serde/de/trait.Deserialize.js index b36d294..2206d22 100644 --- a/trait.impl/serde/de/trait.Deserialize.js +++ b/trait.impl/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl<'de> Deserialize<'de> for TrackId"],["impl<'de> Deserialize<'de> for Time"],["impl<'de> Deserialize<'de> for PlaylistOrdering"]] +"mpris_server":[["impl<'de> Deserialize<'de> for PlaylistOrdering"],["impl<'de> Deserialize<'de> for Time"],["impl<'de> Deserialize<'de> for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/serde/ser/trait.Serialize.js b/trait.impl/serde/ser/trait.Serialize.js index f2db74f..0d5876b 100644 --- a/trait.impl/serde/ser/trait.Serialize.js +++ b/trait.impl/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Serialize for Playlist"],["impl Serialize for Metadata"],["impl Serialize for TrackId"],["impl Serialize for Time"]] +"mpris_server":[["impl Serialize for Metadata"],["impl Serialize for Playlist"],["impl Serialize for Time"],["impl Serialize for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/zvariant/basic/trait.Basic.js b/trait.impl/zvariant/basic/trait.Basic.js new file mode 100644 index 0000000..b871f3e --- /dev/null +++ b/trait.impl/zvariant/basic/trait.Basic.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"mpris_server":[["impl Basic for TrackId"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/zvariant/type/trait.Type.js b/trait.impl/zvariant/type/trait.Type.js index ddcface..a039f49 100644 --- a/trait.impl/zvariant/type/trait.Type.js +++ b/trait.impl/zvariant/type/trait.Type.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"mpris_server":[["impl Type for Metadata"],["impl Type for Playlist"],["impl Type for PlaybackStatus"],["impl Type for Time"],["impl Type for TrackId"],["impl Type for PlaylistOrdering"],["impl Type for LoopStatus"]] +"mpris_server":[["impl Type for LoopStatus"],["impl Type for PlaybackStatus"],["impl Type for PlaylistOrdering"],["impl Type for Metadata"],["impl Type for Playlist"],["impl Type for Time"],["impl Type for TrackId"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/type.impl/alloc/string/struct.String.js b/type.impl/alloc/string/struct.String.js index c1a55b8..808fe38 100644 --- a/type.impl/alloc/string/struct.String.js +++ b/type.impl/alloc/string/struct.String.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"mpris_server":[["
source§

impl String

1.0.0 (const: 1.39.0) · source

pub const fn new() -> String

Creates a new empty String.

\n

Given that the String is empty, this will not allocate any initial\nbuffer. While that means that this initial operation is very\ninexpensive, it may cause excessive allocation later when you add\ndata. If you have an idea of how much data the String will hold,\nconsider the with_capacity method to prevent excessive\nre-allocation.

\n
§Examples
\n
let s = String::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> String

Creates a new empty String with at least the specified capacity.

\n

Strings have an internal buffer to hold their data. The capacity is\nthe length of that buffer, and can be queried with the capacity\nmethod. This method creates an empty String, but one with an initial\nbuffer that can hold at least capacity bytes. This is useful when you\nmay be appending a bunch of data to the String, reducing the number of\nreallocations it needs to do.

\n

If the given capacity is 0, no allocation will occur, and this method\nis identical to the new method.

\n
§Examples
\n
let mut s = String::with_capacity(10);\n\n// The String contains no chars, even though it has capacity for more\nassert_eq!(s.len(), 0);\n\n// These are all done without reallocating...\nlet cap = s.capacity();\nfor _ in 0..10 {\n    s.push('a');\n}\n\nassert_eq!(s.capacity(), cap);\n\n// ...but this may make the string reallocate\ns.push('a');
\n
1.0.0 · source

pub fn from_utf8(vec: Vec<u8>) -> Result<String, FromUtf8Error>

Converts a vector of bytes to a String.

\n

A string (String) is made of bytes (u8), and a vector of bytes\n(Vec<u8>) is made of bytes, so this function converts between the\ntwo. Not all byte slices are valid Strings, however: String\nrequires that it is valid UTF-8. from_utf8() checks to ensure that\nthe bytes are valid UTF-8, and then does the conversion.

\n

If you are sure that the byte slice is valid UTF-8, and you don’t want\nto incur the overhead of the validity check, there is an unsafe version\nof this function, from_utf8_unchecked, which has the same behavior\nbut skips the check.

\n

This method will take care to not copy the vector, for efficiency’s\nsake.

\n

If you need a &str instead of a String, consider\nstr::from_utf8.

\n

The inverse of this method is into_bytes.

\n
§Errors
\n

Returns Err if the slice is not UTF-8 with a description as to why the\nprovided bytes are not UTF-8. The vector you moved in is also included.

\n
§Examples
\n

Basic usage:

\n\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\n// We know these bytes are valid, so we'll use `unwrap()`.\nlet sparkle_heart = String::from_utf8(sparkle_heart).unwrap();\n\nassert_eq!(\"💖\", sparkle_heart);
\n

Incorrect bytes:

\n\n
// some invalid bytes, in a vector\nlet sparkle_heart = vec![0, 159, 146, 150];\n\nassert!(String::from_utf8(sparkle_heart).is_err());
\n

See the docs for FromUtf8Error for more details on what you can do\nwith this error.

\n
1.0.0 · source

pub fn from_utf8_lossy(v: &[u8]) -> Cow<'_, str>

Converts a slice of bytes to a string, including invalid characters.

\n

Strings are made of bytes (u8), and a slice of bytes\n(&[u8]) is made of bytes, so this function converts\nbetween the two. Not all byte slices are valid strings, however: strings\nare required to be valid UTF-8. During this conversion,\nfrom_utf8_lossy() will replace any invalid UTF-8 sequences with\nU+FFFD REPLACEMENT CHARACTER, which looks like this: �

\n

If you are sure that the byte slice is valid UTF-8, and you don’t want\nto incur the overhead of the conversion, there is an unsafe version\nof this function, from_utf8_unchecked, which has the same behavior\nbut skips the checks.

\n

This function returns a Cow<'a, str>. If our byte slice is invalid\nUTF-8, then we need to insert the replacement characters, which will\nchange the size of the string, and hence, require a String. But if\nit’s already valid UTF-8, we don’t need a new allocation. This return\ntype allows us to handle both cases.

\n
§Examples
\n

Basic usage:

\n\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\nlet sparkle_heart = String::from_utf8_lossy(&sparkle_heart);\n\nassert_eq!(\"💖\", sparkle_heart);
\n

Incorrect bytes:

\n\n
// some invalid bytes\nlet input = b\"Hello \\xF0\\x90\\x80World\";\nlet output = String::from_utf8_lossy(input);\n\nassert_eq!(\"Hello �World\", output);
\n
1.0.0 · source

pub fn from_utf16(v: &[u16]) -> Result<String, FromUtf16Error>

Decode a UTF-16–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n
// 𝄞music\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0x0073, 0x0069, 0x0063];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0xD800, 0x0069, 0x0063];\nassert!(String::from_utf16(v).is_err());
\n
1.0.0 · source

pub fn from_utf16_lossy(v: &[u16]) -> String

Decode a UTF-16–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n
// 𝄞mus<invalid>ic<invalid>\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0x0073, 0xDD1E, 0x0069, 0x0063,\n          0xD834];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16_lossy(v));
\n
source

pub fn from_utf16le(v: &[u8]) -> Result<String, FromUtf16Error>

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16LE–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞music\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x73, 0x00, 0x69, 0x00, 0x63, 0x00];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16le(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x00, 0xD8, 0x69, 0x00, 0x63, 0x00];\nassert!(String::from_utf16le(v).is_err());
\n
source

pub fn from_utf16le_lossy(v: &[u8]) -> String

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16LE–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16le_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞mus<invalid>ic<invalid>\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x73, 0x00, 0x1E, 0xDD, 0x69, 0x00, 0x63, 0x00,\n          0x34, 0xD8];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16le_lossy(v));
\n
source

pub fn from_utf16be(v: &[u8]) -> Result<String, FromUtf16Error>

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16BE–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞music\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0x00, 0x73, 0x00, 0x69, 0x00, 0x63];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16be(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0xD8, 0x00, 0x00, 0x69, 0x00, 0x63];\nassert!(String::from_utf16be(v).is_err());
\n
source

pub fn from_utf16be_lossy(v: &[u8]) -> String

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16BE–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16le_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞mus<invalid>ic<invalid>\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0x00, 0x73, 0xDD, 0x1E, 0x00, 0x69, 0x00, 0x63,\n          0xD8, 0x34];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16be_lossy(v));
\n
source

pub fn into_raw_parts(self) -> (*mut u8, usize, usize)

🔬This is a nightly-only experimental API. (vec_into_raw_parts)

Decomposes a String into its raw components.

\n

Returns the raw pointer to the underlying data, the length of\nthe string (in bytes), and the allocated capacity of the data\n(in bytes). These are the same arguments in the same order as\nthe arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the String. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a String with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet s = String::from(\"hello\");\n\nlet (ptr, len, cap) = s.into_raw_parts();\n\nlet rebuilt = unsafe { String::from_raw_parts(ptr, len, cap) };\nassert_eq!(rebuilt, \"hello\");
\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n buf: *mut u8,\n length: usize,\n capacity: usize\n) -> String

Creates a new String from a length, capacity, and pointer.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • The memory at buf needs to have been previously allocated by the\nsame allocator the standard library uses, with a required alignment of exactly 1.
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • capacity needs to be the correct value.
  • \n
  • The first length bytes at buf need to be valid UTF-8.
  • \n
\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example, it is normally not safe to\nbuild a String from a pointer to a C char array containing UTF-8\nunless you are certain that array was originally allocated by the\nRust standard library’s allocator.

\n

The ownership of buf is effectively transferred to the\nString which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::mem;\n\nunsafe {\n    let s = String::from(\"hello\");\n\n    // Prevent automatically dropping the String's data\n    let mut s = mem::ManuallyDrop::new(s);\n\n    let ptr = s.as_mut_ptr();\n    let len = s.len();\n    let capacity = s.capacity();\n\n    let s = String::from_raw_parts(ptr, len, capacity);\n\n    assert_eq!(String::from(\"hello\"), s);\n}
\n
1.0.0 · source

pub unsafe fn from_utf8_unchecked(bytes: Vec<u8>) -> String

Converts a vector of bytes to a String without checking that the\nstring contains valid UTF-8.

\n

See the safe version, from_utf8, for more details.

\n
§Safety
\n

This function is unsafe because it does not check that the bytes passed\nto it are valid UTF-8. If this constraint is violated, it may cause\nmemory unsafety issues with future users of the String, as the rest of\nthe standard library assumes that Strings are valid UTF-8.

\n
§Examples
\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\nlet sparkle_heart = unsafe {\n    String::from_utf8_unchecked(sparkle_heart)\n};\n\nassert_eq!(\"💖\", sparkle_heart);
\n
1.0.0 · source

pub fn into_bytes(self) -> Vec<u8>

Converts a String into a byte vector.

\n

This consumes the String, so we do not need to copy its contents.

\n
§Examples
\n
let s = String::from(\"hello\");\nlet bytes = s.into_bytes();\n\nassert_eq!(&[104, 101, 108, 108, 111][..], &bytes[..]);
\n
1.7.0 · source

pub fn as_str(&self) -> &str

Extracts a string slice containing the entire String.

\n
§Examples
\n
let s = String::from(\"foo\");\n\nassert_eq!(\"foo\", s.as_str());
\n
1.7.0 · source

pub fn as_mut_str(&mut self) -> &mut str

Converts a String into a mutable string slice.

\n
§Examples
\n
let mut s = String::from(\"foobar\");\nlet s_mut_str = s.as_mut_str();\n\ns_mut_str.make_ascii_uppercase();\n\nassert_eq!(\"FOOBAR\", s_mut_str);
\n
1.0.0 · source

pub fn push_str(&mut self, string: &str)

Appends a given string slice onto the end of this String.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.push_str(\"bar\");\n\nassert_eq!(\"foobar\", s);
\n
source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

🔬This is a nightly-only experimental API. (string_extend_from_within)

Copies elements from src range to the end of the string.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Examples
\n
#![feature(string_extend_from_within)]\nlet mut string = String::from(\"abcde\");\n\nstring.extend_from_within(2..);\nassert_eq!(string, \"abcdecde\");\n\nstring.extend_from_within(..2);\nassert_eq!(string, \"abcdecdeab\");\n\nstring.extend_from_within(4..8);\nassert_eq!(string, \"abcdecdeabecde\");
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns this String’s capacity, in bytes.

\n
§Examples
\n
let s = String::with_capacity(10);\n\nassert!(s.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional bytes more than the\ncurrent length. The allocator may reserve more space to speculatively\navoid frequent allocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity overflows usize.

\n
§Examples
\n

Basic usage:

\n\n
let mut s = String::new();\n\ns.reserve(10);\n\nassert!(s.capacity() >= 10);
\n

This might not actually increase the capacity:

\n\n
let mut s = String::with_capacity(10);\ns.push('a');\ns.push('b');\n\n// s now has a length of 2 and a capacity of at least 10\nlet capacity = s.capacity();\nassert_eq!(2, s.len());\nassert!(capacity >= 10);\n\n// Since we already have at least an extra 8 capacity, calling this...\ns.reserve(8);\n\n// ... doesn't actually increase.\nassert_eq!(capacity, s.capacity());
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional bytes more than\nthe current length. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n
§Panics
\n

Panics if the new capacity overflows usize.

\n
§Examples
\n

Basic usage:

\n\n
let mut s = String::new();\n\ns.reserve_exact(10);\n\nassert!(s.capacity() >= 10);
\n

This might not actually increase the capacity:

\n\n
let mut s = String::with_capacity(10);\ns.push('a');\ns.push('b');\n\n// s now has a length of 2 and a capacity of at least 10\nlet capacity = s.capacity();\nassert_eq!(2, s.len());\nassert!(capacity >= 10);\n\n// Since we already have at least an extra 8 capacity, calling this...\ns.reserve_exact(8);\n\n// ... doesn't actually increase.\nassert_eq!(capacity, s.capacity());
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional bytes more than the\ncurrent length. The allocator may reserve more space to speculatively\navoid frequent allocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &str) -> Result<String, TryReserveError> {\n    let mut output = String::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.push_str(data);\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional bytes\nmore than the current length. Unlike try_reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling try_reserve_exact, capacity will be greater than or\nequal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &str) -> Result<String, TryReserveError> {\n    let mut output = String::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.push_str(data);\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of this String to match its length.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.reserve(100);\nassert!(s.capacity() >= 100);\n\ns.shrink_to_fit();\nassert_eq!(3, s.capacity());
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of this String with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.reserve(100);\nassert!(s.capacity() >= 100);\n\ns.shrink_to(10);\nassert!(s.capacity() >= 10);\ns.shrink_to(0);\nassert!(s.capacity() >= 3);
\n
1.0.0 · source

pub fn push(&mut self, ch: char)

Appends the given char to the end of this String.

\n
§Examples
\n
let mut s = String::from(\"abc\");\n\ns.push('1');\ns.push('2');\ns.push('3');\n\nassert_eq!(\"abc123\", s);
\n
1.0.0 · source

pub fn as_bytes(&self) -> &[u8]

Returns a byte slice of this String’s contents.

\n

The inverse of this method is from_utf8.

\n
§Examples
\n
let s = String::from(\"hello\");\n\nassert_eq!(&[104, 101, 108, 108, 111], s.as_bytes());
\n
1.0.0 · source

pub fn truncate(&mut self, new_len: usize)

Shortens this String to the specified length.

\n

If new_len is greater than the string’s current length, this has no\neffect.

\n

Note that this method has no effect on the allocated capacity\nof the string

\n
§Panics
\n

Panics if new_len does not lie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"hello\");\n\ns.truncate(2);\n\nassert_eq!(\"he\", s);
\n
1.0.0 · source

pub fn pop(&mut self) -> Option<char>

Removes the last character from the string buffer and returns it.

\n

Returns None if this String is empty.

\n
§Examples
\n
let mut s = String::from(\"abč\");\n\nassert_eq!(s.pop(), Some('č'));\nassert_eq!(s.pop(), Some('b'));\nassert_eq!(s.pop(), Some('a'));\n\nassert_eq!(s.pop(), None);
\n
1.0.0 · source

pub fn remove(&mut self, idx: usize) -> char

Removes a char from this String at a byte position and returns it.

\n

This is an O(n) operation, as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than or equal to the String’s length,\nor if it does not lie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"abç\");\n\nassert_eq!(s.remove(0), 'a');\nassert_eq!(s.remove(1), 'ç');\nassert_eq!(s.remove(0), 'b');
\n
source

pub fn remove_matches<P, 'a>(&'a mut self, pat: P)
where\n P: for<'x> Pattern<'x>,

🔬This is a nightly-only experimental API. (string_remove_matches)

Remove all matches of pattern pat in the String.

\n
§Examples
\n
#![feature(string_remove_matches)]\nlet mut s = String::from(\"Trees are not green, the sky is not blue.\");\ns.remove_matches(\"not \");\nassert_eq!(\"Trees are green, the sky is blue.\", s);
\n

Matches will be detected and removed iteratively, so in cases where\npatterns overlap, only the first pattern will be removed:

\n\n
#![feature(string_remove_matches)]\nlet mut s = String::from(\"banana\");\ns.remove_matches(\"ana\");\nassert_eq!(\"bna\", s);
\n
1.26.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(char) -> bool,

Retains only the characters specified by the predicate.

\n

In other words, remove all characters c such that f(c) returns false.\nThis method operates in place, visiting each character exactly once in the\noriginal order, and preserves the order of the retained characters.

\n
§Examples
\n
let mut s = String::from(\"f_o_ob_ar\");\n\ns.retain(|c| c != '_');\n\nassert_eq!(s, \"foobar\");
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut s = String::from(\"abcde\");\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\ns.retain(|_| *iter.next().unwrap());\nassert_eq!(s, \"bce\");
\n
1.0.0 · source

pub fn insert(&mut self, idx: usize, ch: char)

Inserts a character into this String at a byte position.

\n

This is an O(n) operation as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than the String’s length, or if it does not\nlie on a char boundary.

\n
§Examples
\n
let mut s = String::with_capacity(3);\n\ns.insert(0, 'f');\ns.insert(1, 'o');\ns.insert(2, 'o');\n\nassert_eq!(\"foo\", s);
\n
1.16.0 · source

pub fn insert_str(&mut self, idx: usize, string: &str)

Inserts a string slice into this String at a byte position.

\n

This is an O(n) operation as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than the String’s length, or if it does not\nlie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"bar\");\n\ns.insert_str(0, \"foo\");\n\nassert_eq!(\"foobar\", s);
\n
1.0.0 · source

pub unsafe fn as_mut_vec(&mut self) -> &mut Vec<u8>

Returns a mutable reference to the contents of this String.

\n
§Safety
\n

This function is unsafe because the returned &mut Vec allows writing\nbytes which are not valid UTF-8. If this constraint is violated, using\nthe original String after dropping the &mut Vec may violate memory\nsafety, as the rest of the standard library assumes that Strings are\nvalid UTF-8.

\n
§Examples
\n
let mut s = String::from(\"hello\");\n\nunsafe {\n    let vec = s.as_mut_vec();\n    assert_eq!(&[104, 101, 108, 108, 111][..], &vec[..]);\n\n    vec.reverse();\n}\nassert_eq!(s, \"olleh\");
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the length of this String, in bytes, not chars or\ngraphemes. In other words, it might not be what a human considers the\nlength of the string.

\n
§Examples
\n
let a = String::from(\"foo\");\nassert_eq!(a.len(), 3);\n\nlet fancy_f = String::from(\"ƒoo\");\nassert_eq!(fancy_f.len(), 4);\nassert_eq!(fancy_f.chars().count(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if this String has a length of zero, and false otherwise.

\n
§Examples
\n
let mut v = String::new();\nassert!(v.is_empty());\n\nv.push('a');\nassert!(!v.is_empty());
\n
1.16.0 · source

pub fn split_off(&mut self, at: usize) -> String

Splits the string into two at the given byte index.

\n

Returns a newly allocated String. self contains bytes [0, at), and\nthe returned String contains bytes [at, len). at must be on the\nboundary of a UTF-8 code point.

\n

Note that the capacity of self does not change.

\n
§Panics
\n

Panics if at is not on a UTF-8 code point boundary, or if it is beyond the last\ncode point of the string.

\n
§Examples
\n
let mut hello = String::from(\"Hello, World!\");\nlet world = hello.split_off(7);\nassert_eq!(hello, \"Hello, \");\nassert_eq!(world, \"World!\");
\n
1.0.0 · source

pub fn clear(&mut self)

Truncates this String, removing all contents.

\n

While this means the String will have a length of zero, it does not\ntouch its capacity.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.clear();\n\nassert!(s.is_empty());\nassert_eq!(0, s.len());\nassert_eq!(3, s.capacity());
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_>
where\n R: RangeBounds<usize>,

Removes the specified range from the string in bulk, returning all\nremoved characters as an iterator.

\n

The returned iterator keeps a mutable borrow on the string to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\ncore::mem::forget, for example), the string may still contain a copy\nof any drained characters, or may have lost characters arbitrarily,\nincluding characters outside the range.

\n
§Examples
\n
let mut s = String::from(\"α is alpha, β is beta\");\nlet beta_offset = s.find('β').unwrap_or(s.len());\n\n// Remove the range up until the β from the string\nlet t: String = s.drain(..beta_offset).collect();\nassert_eq!(t, \"α is alpha, \");\nassert_eq!(s, \"β is beta\");\n\n// A full range clears the string, like `clear()` does\ns.drain(..);\nassert_eq!(s, \"\");
\n
1.27.0 · source

pub fn replace_range<R>(&mut self, range: R, replace_with: &str)
where\n R: RangeBounds<usize>,

Removes the specified range in the string,\nand replaces it with the given string.\nThe given string doesn’t need to be the same length as the range.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Examples
\n
let mut s = String::from(\"α is alpha, β is beta\");\nlet beta_offset = s.find('β').unwrap_or(s.len());\n\n// Replace the range up until the β from the string\ns.replace_range(..beta_offset, \"Α is capital alpha; \");\nassert_eq!(s, \"Α is capital alpha; β is beta\");
\n
1.4.0 · source

pub fn into_boxed_str(self) -> Box<str>

Converts this String into a Box<str>.

\n

This will drop any excess capacity.

\n
§Examples
\n
let s = String::from(\"hello\");\n\nlet b = s.into_boxed_str();
\n
1.72.0 · source

pub fn leak<'a>(self) -> &'a mut str

Consumes and leaks the String, returning a mutable reference to the contents,\n&'a mut str.

\n

The caller has free choice over the returned lifetime, including 'static. Indeed,\nthis function is ideally used for data that lives for the remainder of the program’s life,\nas dropping the returned reference will cause a memory leak.

\n

It does not reallocate or shrink the String,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice. If you don’t want that, call into_boxed_str,\nand then Box::leak.

\n
§Examples
\n
let x = String::from(\"bucket\");\nlet static_ref: &'static mut str = x.leak();\nassert_eq!(static_ref, \"bucket\");
\n
",0,"mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<OsStr> for String

source§

fn as_ref(&self) -> &OsStr

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<Path> for String

source§

fn as_ref(&self) -> &Path

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.16.0 · source§

impl ToSocketAddrs for String

§

type Iter = IntoIter<SocketAddr>

Returned iterator over socket addresses which this type may correspond\nto.
source§

fn to_socket_addrs(&self) -> Result<IntoIter<SocketAddr>, Error>

Converts this object to an iterator of resolved SocketAddrs. Read more
","ToSocketAddrs","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl StructuralPartialEq for String

","StructuralPartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.43.0 · source§

impl AsMut<str> for String

source§

fn as_mut(&mut self) -> &mut str

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeFrom<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeFrom<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeFull> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, _index: RangeFull) -> &str

Performs the indexing (container[index]) operation. Read more
","Index","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl Index<RangeInclusive<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeInclusive<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl Index<RangeToInclusive<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeToInclusive<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeTo<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeTo<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<Range<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: Range<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<&'a str> for String

source§

fn eq(&self, other: &&'a str) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&'a str) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<str> for String

source§

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

This method tests for self and other values to be equal, and is used\nby ==.
source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<Cow<'a, str>> for String

source§

fn eq(&self, other: &Cow<'a, str>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Cow<'a, str>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl PartialEq for String

source§

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

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.36.0 · source§

impl BorrowMut<str> for String

source§

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

Mutably borrows from an owned value. Read more
","BorrowMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<[u8]> for String

source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[u8]>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<str> for String

source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.45.0 · source§

impl Extend<Box<str>> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = Box<str>>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.2.0 · source§

impl<'a> Extend<&'a char> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a char>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a char)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a char>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.4.0 · source§

impl Extend<String> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = String>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: String)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a> Extend<&'a str> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a str>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: &'a str)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Extend<char> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = char>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, c: char)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.19.0 · source§

impl<'a> Extend<Cow<'a, str>> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = Cow<'a, str>>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: Cow<'a, str>)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Clone for String

source§

fn clone(&self) -> String

Returns a copy of the value. Read more
source§

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

Performs copy-assignment from source. Read more
","Clone","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl PartialOrd for String

source§

fn partial_cmp(&self, other: &String) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Ord for String

source§

fn cmp(&self, other: &String) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.12.0 · source§

impl AddAssign<&str> for String

Implements the += operator for appending to a String.

\n

This has the same behavior as the push_str method.

\n
source§

fn add_assign(&mut self, other: &str)

Performs the += operation. Read more
","AddAssign<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Deref for String

§

type Target = str

The resulting type after dereferencing.
source§

fn deref(&self) -> &str

Dereferences the value.
","Deref","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Hash for String

source§

fn hash<H>(&self, hasher: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Display for String

source§

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

Formats the value using the given formatter. Read more
","Display","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.4.0 · source§

impl FromIterator<String> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = String>,

Creates a value from an iterator. Read more
","FromIterator","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.45.0 · source§

impl FromIterator<Box<str>> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = Box<str>>,

Creates a value from an iterator. Read more
","FromIterator>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.17.0 · source§

impl<'a> FromIterator<&'a char> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = &'a char>,

Creates a value from an iterator. Read more
","FromIterator<&'a char>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a> FromIterator<&'a str> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = &'a str>,

Creates a value from an iterator. Read more
","FromIterator<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.19.0 · source§

impl<'a> FromIterator<Cow<'a, str>> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = Cow<'a, str>>,

Creates a value from an iterator. Read more
","FromIterator>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl FromIterator<char> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = char>,

Creates a value from an iterator. Read more
","FromIterator","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Default for String

source§

fn default() -> String

Creates an empty String.

\n
","Default","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Write for String

source§

fn write_str(&mut self, s: &str) -> Result<(), Error>

Writes a string slice into this writer, returning whether the write\nsucceeded. Read more
source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more
","Write","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Add<&str> for String

Implements the + operator for concatenating two strings.

\n

This consumes the String on the left-hand side and re-uses its buffer (growing it if\nnecessary). This is done to avoid allocating a new String and copying the entire contents on\nevery operation, which would lead to O(n^2) running time when building an n-byte string by\nrepeated concatenation.

\n

The string on the right-hand side is only borrowed; its contents are copied into the returned\nString.

\n

§Examples

\n

Concatenating two Strings takes the first by value and borrows the second:

\n\n
let a = String::from(\"hello\");\nlet b = String::from(\" world\");\nlet c = a + &b;\n// `a` is moved and can no longer be used here.
\n

If you want to keep using the first String, you can clone it and append to the clone instead:

\n\n
let a = String::from(\"hello\");\nlet b = String::from(\" world\");\nlet c = a.clone() + &b;\n// `a` is still valid here.
\n

Concatenating &str slices can be done by converting the first to a String:

\n\n
let a = \"hello\";\nlet b = \" world\";\nlet c = a.to_string() + b;
\n
§

type Output = String

The resulting type after applying the + operator.
source§

fn add(self, other: &str) -> String

Performs the + operation. Read more
","Add<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Debug for String

source§

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

Formats the value using the given formatter. Read more
","Debug","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Borrow<str> for String

source§

fn borrow(&self) -> &str

Immutably borrows from an owned value. Read more
","Borrow","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl DerefMut for String

source§

fn deref_mut(&mut self) -> &mut str

Mutably dereferences the value.
","DerefMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl From<&str> for String

source§

fn from(s: &str) -> String

Converts a &str into a String.

\n

The result is allocated on the heap.

\n
","From<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.44.0 · source§

impl From<&mut str> for String

source§

fn from(s: &mut str) -> String

Converts a &mut str into a String.

\n

The result is allocated on the heap.

\n
","From<&mut str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.18.0 · source§

impl From<Box<str>> for String

source§

fn from(s: Box<str>) -> String

Converts the given boxed str slice to a String.\nIt is notable that the str slice is owned.

\n
§Examples
\n
let s1: String = String::from(\"hello world\");\nlet s2: Box<str> = s1.into_boxed_str();\nlet s3: String = String::from(s2);\n\nassert_eq!(\"hello world\", s3)
\n
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.35.0 · source§

impl From<&String> for String

source§

fn from(s: &String) -> String

Converts a &String into a String.

\n

This clones s and returns the clone.

\n
","From<&String>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.46.0 · source§

impl From<char> for String

source§

fn from(c: char) -> String

Allocates an owned String from a single character.

\n
§Example
\n
let c: char = 'a';\nlet s: String = String::from(c);\nassert_eq!(\"a\", &s[..]);
\n
","From","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.14.0 · source§

impl<'a> From<Cow<'a, str>> for String

source§

fn from(s: Cow<'a, str>) -> String

Converts a clone-on-write string to an owned\ninstance of String.

\n

This extracts the owned string,\nclones the string if it is not already owned.

\n
§Example
\n
// If the string is not owned...\nlet cow: Cow<'_, str> = Cow::Borrowed(\"eggplant\");\n// It will allocate on the heap and copy the string.\nlet owned: String = String::from(cow);\nassert_eq!(&owned[..], \"eggplant\");
\n
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl FromStr for String

§

type Err = Infallible

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<String, <String as FromStr>::Err>

Parses a string s to return a value of this type. Read more
","FromStr","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<Range<usize>> for String

source§

fn index_mut(&mut self, index: Range<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl IndexMut<RangeToInclusive<usize>> for String

source§

fn index_mut(&mut self, index: RangeToInclusive<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeTo<usize>> for String

source§

fn index_mut(&mut self, index: RangeTo<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl IndexMut<RangeInclusive<usize>> for String

source§

fn index_mut(&mut self, index: RangeInclusive<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeFull> for String

source§

fn index_mut(&mut self, _index: RangeFull) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeFrom<usize>> for String

source§

fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Eq for String

","Eq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl StructuralEq for String

","StructuralEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl From<Guid> for String

§

fn from(guid: Guid) -> String

Converts to this type from the input type.
","From","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl<'de> Deserialize<'de> for String

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<String, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl<'de, E> IntoDeserializer<'de, E> for String
where\n E: Error,

§

type Deserializer = StringDeserializer<E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> StringDeserializer<E>

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl Serialize for String

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<&Signature<'a>> for String

§

fn from(value: &Signature<'a>) -> String

Converts to this type from the input type.
","From<&Signature<'a>>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<Str<'a>> for String

§

fn from(value: Str<'a>) -> String

Converts to this type from the input type.
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<Signature<'a>> for String

§

fn from(value: Signature<'a>) -> String

Converts to this type from the input type.
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> TryFrom<&'a Value<'a>> for String

§

type Error = Error

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

fn try_from(\n value: &'a Value<'_>\n) -> Result<String, <String as TryFrom<&'a Value<'a>>>::Error>

Performs the conversion.
","TryFrom<&'a Value<'a>>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> TryFrom<Value<'a>> for String

§

type Error = Error

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

fn try_from(\n value: Value<'a>\n) -> Result<String, <String as TryFrom<Value<'a>>>::Error>

Performs the conversion.
","TryFrom>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl TryFrom<OwnedValue> for String

§

type Error = Error

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

fn try_from(\n v: OwnedValue\n) -> Result<String, <String as TryFrom<OwnedValue>>::Error>

Performs the conversion.
","TryFrom","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Type for String

§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
","Type","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Basic for String

§

const SIGNATURE_CHAR: char = 's'

The type signature, as a character.
§

const SIGNATURE_STR: &'static str = "s"

The type signature, as a string.
§

fn alignment(format: EncodingFormat) -> usize

The required padding alignment for the given format.
","Basic","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Arg for String

§

fn as_str(&self) -> Result<&str, Errno>

Returns a view of this string as a string slice.
§

fn to_string_lossy(&self) -> Cow<'_, str>

Returns a potentially-lossy rendering of this string as a Cow<'_, str>.
§

fn as_cow_c_str(&self) -> Result<Cow<'_, CStr>, Errno>

Returns a view of this string as a maybe-owned CStr.
§

fn into_c_str<'b>(self) -> Result<Cow<'b, CStr>, Errno>
where\n String: 'b,

Consumes self and returns a view of this string as a maybe-owned\nCStr.
§

fn into_with_c_str<T, F>(self, f: F) -> Result<T, Errno>
where\n String: Sized,\n F: FnOnce(&CStr) -> Result<T, Errno>,

Runs a closure with self passed in as a &CStr.
","Arg","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Value for String

§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.
","Value","mpris_server::metadata::DateTime","mpris_server::Uri"]] +"mpris_server":[["
1.0.0 · source§

impl Add<&str> for String

Implements the + operator for concatenating two strings.

\n

This consumes the String on the left-hand side and re-uses its buffer (growing it if\nnecessary). This is done to avoid allocating a new String and copying the entire contents on\nevery operation, which would lead to O(n^2) running time when building an n-byte string by\nrepeated concatenation.

\n

The string on the right-hand side is only borrowed; its contents are copied into the returned\nString.

\n

§Examples

\n

Concatenating two Strings takes the first by value and borrows the second:

\n\n
let a = String::from(\"hello\");\nlet b = String::from(\" world\");\nlet c = a + &b;\n// `a` is moved and can no longer be used here.
\n

If you want to keep using the first String, you can clone it and append to the clone instead:

\n\n
let a = String::from(\"hello\");\nlet b = String::from(\" world\");\nlet c = a.clone() + &b;\n// `a` is still valid here.
\n

Concatenating &str slices can be done by converting the first to a String:

\n\n
let a = \"hello\";\nlet b = \" world\";\nlet c = a.to_string() + b;
\n
§

type Output = String

The resulting type after applying the + operator.
source§

fn add(self, other: &str) -> String

Performs the + operation. Read more
","Add<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.12.0 · source§

impl AddAssign<&str> for String

Implements the += operator for appending to a String.

\n

This has the same behavior as the push_str method.

\n
source§

fn add_assign(&mut self, other: &str)

Performs the += operation. Read more
","AddAssign<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Arg for String

§

fn as_str(&self) -> Result<&str, Errno>

Returns a view of this string as a string slice.
§

fn to_string_lossy(&self) -> Cow<'_, str>

Returns a potentially-lossy rendering of this string as a\nCow<'_, str>.
§

fn as_cow_c_str(&self) -> Result<Cow<'_, CStr>, Errno>

Returns a view of this string as a maybe-owned CStr.
§

fn into_c_str<'b>(self) -> Result<Cow<'b, CStr>, Errno>
where\n String: 'b,

Consumes self and returns a view of this string as a maybe-owned\nCStr.
§

fn into_with_c_str<T, F>(self, f: F) -> Result<T, Errno>
where\n String: Sized,\n F: FnOnce(&CStr) -> Result<T, Errno>,

Runs a closure with self passed in as a &CStr.
","Arg","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.43.0 · source§

impl AsMut<str> for String

source§

fn as_mut(&mut self) -> &mut str

Converts this type into a mutable reference of the (usually inferred) input type.
","AsMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<[u8]> for String

source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef<[u8]>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<OsStr> for String

source§

fn as_ref(&self) -> &OsStr

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<Path> for String

source§

fn as_ref(&self) -> &Path

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl AsRef<str> for String

source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Basic for String

§

const SIGNATURE_CHAR: char = 's'

The type signature, as a character.
§

const SIGNATURE_STR: &'static str = "s"

The type signature, as a string.
§

fn alignment(format: Format) -> usize

The required padding alignment for the given format.
","Basic","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Borrow<str> for String

source§

fn borrow(&self) -> &str

Immutably borrows from an owned value. Read more
","Borrow","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.36.0 · source§

impl BorrowMut<str> for String

source§

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

Mutably borrows from an owned value. Read more
","BorrowMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Clone for String

source§

fn clone(&self) -> String

Returns a copy of the value. Read more
source§

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

Performs copy-assignment from source. Read more
","Clone","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Debug for String

source§

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

Formats the value using the given formatter. Read more
","Debug","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Default for String

source§

fn default() -> String

Creates an empty String.

\n
","Default","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Deref for String

§

type Target = str

The resulting type after dereferencing.
source§

fn deref(&self) -> &str

Dereferences the value.
","Deref","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl DerefMut for String

source§

fn deref_mut(&mut self) -> &mut str

Mutably dereferences the value.
","DerefMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl<'de> Deserialize<'de> for String

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<String, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Display for String

source§

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

Formats the value using the given formatter. Read more
","Display","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.2.0 · source§

impl<'a> Extend<&'a char> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a char>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, _: &'a char)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a char>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a> Extend<&'a str> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = &'a str>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: &'a str)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.45.0 · source§

impl Extend<Box<str>> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = Box<str>>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.19.0 · source§

impl<'a> Extend<Cow<'a, str>> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = Cow<'a, str>>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: Cow<'a, str>)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.4.0 · source§

impl Extend<String> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = String>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, s: String)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Extend<char> for String

source§

fn extend<I>(&mut self, iter: I)
where\n I: IntoIterator<Item = char>,

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, c: char)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<&Signature<'a>> for String

§

fn from(value: &Signature<'a>) -> String

Converts to this type from the input type.
","From<&Signature<'a>>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.35.0 · source§

impl From<&String> for String

source§

fn from(s: &String) -> String

Converts a &String into a String.

\n

This clones s and returns the clone.

\n
","From<&String>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.44.0 · source§

impl From<&mut str> for String

source§

fn from(s: &mut str) -> String

Converts a &mut str into a String.

\n

The result is allocated on the heap.

\n
","From<&mut str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl From<&str> for String

source§

fn from(s: &str) -> String

Converts a &str into a String.

\n

The result is allocated on the heap.

\n
","From<&str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.18.0 · source§

impl From<Box<str>> for String

source§

fn from(s: Box<str>) -> String

Converts the given boxed str slice to a String.\nIt is notable that the str slice is owned.

\n
§Examples
\n
let s1: String = String::from(\"hello world\");\nlet s2: Box<str> = s1.into_boxed_str();\nlet s3: String = String::from(s2);\n\nassert_eq!(\"hello world\", s3)
\n
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.14.0 · source§

impl<'a> From<Cow<'a, str>> for String

source§

fn from(s: Cow<'a, str>) -> String

Converts a clone-on-write string to an owned\ninstance of String.

\n

This extracts the owned string,\nclones the string if it is not already owned.

\n
§Example
\n
// If the string is not owned...\nlet cow: Cow<'_, str> = Cow::Borrowed(\"eggplant\");\n// It will allocate on the heap and copy the string.\nlet owned: String = String::from(cow);\nassert_eq!(&owned[..], \"eggplant\");
\n
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl From<Guid<'_>> for String

§

fn from(guid: Guid<'_>) -> String

Converts to this type from the input type.
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<Signature<'a>> for String

§

fn from(value: Signature<'a>) -> String

Converts to this type from the input type.
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> From<Str<'a>> for String

§

fn from(value: Str<'a>) -> String

Converts to this type from the input type.
","From>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.46.0 · source§

impl From<char> for String

source§

fn from(c: char) -> String

Allocates an owned String from a single character.

\n
§Example
\n
let c: char = 'a';\nlet s: String = String::from(c);\nassert_eq!(\"a\", &s[..]);
\n
","From","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.17.0 · source§

impl<'a> FromIterator<&'a char> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = &'a char>,

Creates a value from an iterator. Read more
","FromIterator<&'a char>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a> FromIterator<&'a str> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = &'a str>,

Creates a value from an iterator. Read more
","FromIterator<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.45.0 · source§

impl FromIterator<Box<str>> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = Box<str>>,

Creates a value from an iterator. Read more
","FromIterator>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.19.0 · source§

impl<'a> FromIterator<Cow<'a, str>> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = Cow<'a, str>>,

Creates a value from an iterator. Read more
","FromIterator>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.4.0 · source§

impl FromIterator<String> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = String>,

Creates a value from an iterator. Read more
","FromIterator","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl FromIterator<char> for String

source§

fn from_iter<I>(iter: I) -> String
where\n I: IntoIterator<Item = char>,

Creates a value from an iterator. Read more
","FromIterator","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl FromStr for String

§

type Err = Infallible

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<String, <String as FromStr>::Err>

Parses a string s to return a value of this type. Read more
","FromStr","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Hash for String

source§

fn hash<H>(&self, hasher: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<Range<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: Range<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeFrom<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeFrom<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeFull> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, _index: RangeFull) -> &str

Performs the indexing (container[index]) operation. Read more
","Index","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl Index<RangeInclusive<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeInclusive<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Index<RangeTo<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeTo<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl Index<RangeToInclusive<usize>> for String

§

type Output = str

The returned type after indexing.
source§

fn index(&self, index: RangeToInclusive<usize>) -> &str

Performs the indexing (container[index]) operation. Read more
","Index>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<Range<usize>> for String

source§

fn index_mut(&mut self, index: Range<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeFrom<usize>> for String

source§

fn index_mut(&mut self, index: RangeFrom<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeFull> for String

source§

fn index_mut(&mut self, _index: RangeFull) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl IndexMut<RangeInclusive<usize>> for String

source§

fn index_mut(&mut self, index: RangeInclusive<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.3.0 · source§

impl IndexMut<RangeTo<usize>> for String

source§

fn index_mut(&mut self, index: RangeTo<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.26.0 · source§

impl IndexMut<RangeToInclusive<usize>> for String

source§

fn index_mut(&mut self, index: RangeToInclusive<usize>) -> &mut str

Performs the mutable indexing (container[index]) operation. Read more
","IndexMut>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl<'de, E> IntoDeserializer<'de, E> for String
where\n E: Error,

§

type Deserializer = StringDeserializer<E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> StringDeserializer<E>

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Ord for String

source§

fn cmp(&self, other: &String) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<&'a str> for String

source§

fn eq(&self, other: &&'a str) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &&'a str) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq<&'a str>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<Cow<'a, str>> for String

source§

fn eq(&self, other: &Cow<'a, str>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
source§

fn ne(&self, other: &Cow<'a, str>) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl<'a, 'b> PartialEq<str> for String

source§

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

This method tests for self and other values to be equal, and is used\nby ==.
source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl PartialEq for String

source§

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

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl PartialOrd for String

source§

fn partial_cmp(&self, other: &String) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl Serialize for String

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","mpris_server::metadata::DateTime","mpris_server::Uri"],["
source§

impl String

1.0.0 (const: 1.39.0) · source

pub const fn new() -> String

Creates a new empty String.

\n

Given that the String is empty, this will not allocate any initial\nbuffer. While that means that this initial operation is very\ninexpensive, it may cause excessive allocation later when you add\ndata. If you have an idea of how much data the String will hold,\nconsider the with_capacity method to prevent excessive\nre-allocation.

\n
§Examples
\n
let s = String::new();
\n
1.0.0 · source

pub fn with_capacity(capacity: usize) -> String

Creates a new empty String with at least the specified capacity.

\n

Strings have an internal buffer to hold their data. The capacity is\nthe length of that buffer, and can be queried with the capacity\nmethod. This method creates an empty String, but one with an initial\nbuffer that can hold at least capacity bytes. This is useful when you\nmay be appending a bunch of data to the String, reducing the number of\nreallocations it needs to do.

\n

If the given capacity is 0, no allocation will occur, and this method\nis identical to the new method.

\n
§Examples
\n
let mut s = String::with_capacity(10);\n\n// The String contains no chars, even though it has capacity for more\nassert_eq!(s.len(), 0);\n\n// These are all done without reallocating...\nlet cap = s.capacity();\nfor _ in 0..10 {\n    s.push('a');\n}\n\nassert_eq!(s.capacity(), cap);\n\n// ...but this may make the string reallocate\ns.push('a');
\n
1.0.0 · source

pub fn from_utf8(vec: Vec<u8>) -> Result<String, FromUtf8Error>

Converts a vector of bytes to a String.

\n

A string (String) is made of bytes (u8), and a vector of bytes\n(Vec<u8>) is made of bytes, so this function converts between the\ntwo. Not all byte slices are valid Strings, however: String\nrequires that it is valid UTF-8. from_utf8() checks to ensure that\nthe bytes are valid UTF-8, and then does the conversion.

\n

If you are sure that the byte slice is valid UTF-8, and you don’t want\nto incur the overhead of the validity check, there is an unsafe version\nof this function, from_utf8_unchecked, which has the same behavior\nbut skips the check.

\n

This method will take care to not copy the vector, for efficiency’s\nsake.

\n

If you need a &str instead of a String, consider\nstr::from_utf8.

\n

The inverse of this method is into_bytes.

\n
§Errors
\n

Returns Err if the slice is not UTF-8 with a description as to why the\nprovided bytes are not UTF-8. The vector you moved in is also included.

\n
§Examples
\n

Basic usage:

\n\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\n// We know these bytes are valid, so we'll use `unwrap()`.\nlet sparkle_heart = String::from_utf8(sparkle_heart).unwrap();\n\nassert_eq!(\"💖\", sparkle_heart);
\n

Incorrect bytes:

\n\n
// some invalid bytes, in a vector\nlet sparkle_heart = vec![0, 159, 146, 150];\n\nassert!(String::from_utf8(sparkle_heart).is_err());
\n

See the docs for FromUtf8Error for more details on what you can do\nwith this error.

\n
1.0.0 · source

pub fn from_utf8_lossy(v: &[u8]) -> Cow<'_, str>

Converts a slice of bytes to a string, including invalid characters.

\n

Strings are made of bytes (u8), and a slice of bytes\n(&[u8]) is made of bytes, so this function converts\nbetween the two. Not all byte slices are valid strings, however: strings\nare required to be valid UTF-8. During this conversion,\nfrom_utf8_lossy() will replace any invalid UTF-8 sequences with\nU+FFFD REPLACEMENT CHARACTER, which looks like this: �

\n

If you are sure that the byte slice is valid UTF-8, and you don’t want\nto incur the overhead of the conversion, there is an unsafe version\nof this function, from_utf8_unchecked, which has the same behavior\nbut skips the checks.

\n

This function returns a Cow<'a, str>. If our byte slice is invalid\nUTF-8, then we need to insert the replacement characters, which will\nchange the size of the string, and hence, require a String. But if\nit’s already valid UTF-8, we don’t need a new allocation. This return\ntype allows us to handle both cases.

\n
§Examples
\n

Basic usage:

\n\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\nlet sparkle_heart = String::from_utf8_lossy(&sparkle_heart);\n\nassert_eq!(\"💖\", sparkle_heart);
\n

Incorrect bytes:

\n\n
// some invalid bytes\nlet input = b\"Hello \\xF0\\x90\\x80World\";\nlet output = String::from_utf8_lossy(input);\n\nassert_eq!(\"Hello �World\", output);
\n
1.0.0 · source

pub fn from_utf16(v: &[u16]) -> Result<String, FromUtf16Error>

Decode a UTF-16–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n
// 𝄞music\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0x0073, 0x0069, 0x0063];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0xD800, 0x0069, 0x0063];\nassert!(String::from_utf16(v).is_err());
\n
1.0.0 · source

pub fn from_utf16_lossy(v: &[u16]) -> String

Decode a UTF-16–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n
// 𝄞mus<invalid>ic<invalid>\nlet v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n          0x0073, 0xDD1E, 0x0069, 0x0063,\n          0xD834];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16_lossy(v));
\n
source

pub fn from_utf16le(v: &[u8]) -> Result<String, FromUtf16Error>

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16LE–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞music\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x73, 0x00, 0x69, 0x00, 0x63, 0x00];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16le(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x00, 0xD8, 0x69, 0x00, 0x63, 0x00];\nassert!(String::from_utf16le(v).is_err());
\n
source

pub fn from_utf16le_lossy(v: &[u8]) -> String

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16LE–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16le_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞mus<invalid>ic<invalid>\nlet v = &[0x34, 0xD8, 0x1E, 0xDD, 0x6d, 0x00, 0x75, 0x00,\n          0x73, 0x00, 0x1E, 0xDD, 0x69, 0x00, 0x63, 0x00,\n          0x34, 0xD8];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16le_lossy(v));
\n
source

pub fn from_utf16be(v: &[u8]) -> Result<String, FromUtf16Error>

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16BE–encoded vector v into a String, returning Err\nif v contains any invalid data.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞music\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0x00, 0x73, 0x00, 0x69, 0x00, 0x63];\nassert_eq!(String::from(\"𝄞music\"),\n           String::from_utf16be(v).unwrap());\n\n// 𝄞mu<invalid>ic\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0xD8, 0x00, 0x00, 0x69, 0x00, 0x63];\nassert!(String::from_utf16be(v).is_err());
\n
source

pub fn from_utf16be_lossy(v: &[u8]) -> String

🔬This is a nightly-only experimental API. (str_from_utf16_endian)

Decode a UTF-16BE–encoded slice v into a String, replacing\ninvalid data with the replacement character (U+FFFD).

\n

Unlike from_utf8_lossy which returns a Cow<'a, str>,\nfrom_utf16le_lossy returns a String since the UTF-16 to UTF-8\nconversion requires a memory allocation.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(str_from_utf16_endian)]\n// 𝄞mus<invalid>ic<invalid>\nlet v = &[0xD8, 0x34, 0xDD, 0x1E, 0x00, 0x6d, 0x00, 0x75,\n          0x00, 0x73, 0xDD, 0x1E, 0x00, 0x69, 0x00, 0x63,\n          0xD8, 0x34];\n\nassert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n           String::from_utf16be_lossy(v));
\n
source

pub fn into_raw_parts(self) -> (*mut u8, usize, usize)

🔬This is a nightly-only experimental API. (vec_into_raw_parts)

Decomposes a String into its raw components.

\n

Returns the raw pointer to the underlying data, the length of\nthe string (in bytes), and the allocated capacity of the data\n(in bytes). These are the same arguments in the same order as\nthe arguments to from_raw_parts.

\n

After calling this function, the caller is responsible for the\nmemory previously managed by the String. The only way to do\nthis is to convert the raw pointer, length, and capacity back\ninto a String with the from_raw_parts function, allowing\nthe destructor to perform the cleanup.

\n
§Examples
\n
#![feature(vec_into_raw_parts)]\nlet s = String::from(\"hello\");\n\nlet (ptr, len, cap) = s.into_raw_parts();\n\nlet rebuilt = unsafe { String::from_raw_parts(ptr, len, cap) };\nassert_eq!(rebuilt, \"hello\");
\n
1.0.0 · source

pub unsafe fn from_raw_parts(\n buf: *mut u8,\n length: usize,\n capacity: usize\n) -> String

Creates a new String from a length, capacity, and pointer.

\n
§Safety
\n

This is highly unsafe, due to the number of invariants that aren’t\nchecked:

\n
    \n
  • The memory at buf needs to have been previously allocated by the\nsame allocator the standard library uses, with a required alignment of exactly 1.
  • \n
  • length needs to be less than or equal to capacity.
  • \n
  • capacity needs to be the correct value.
  • \n
  • The first length bytes at buf need to be valid UTF-8.
  • \n
\n

Violating these may cause problems like corrupting the allocator’s\ninternal data structures. For example, it is normally not safe to\nbuild a String from a pointer to a C char array containing UTF-8\nunless you are certain that array was originally allocated by the\nRust standard library’s allocator.

\n

The ownership of buf is effectively transferred to the\nString which may then deallocate, reallocate or change the\ncontents of memory pointed to by the pointer at will. Ensure\nthat nothing else uses the pointer after calling this\nfunction.

\n
§Examples
\n
use std::mem;\n\nunsafe {\n    let s = String::from(\"hello\");\n\n    // Prevent automatically dropping the String's data\n    let mut s = mem::ManuallyDrop::new(s);\n\n    let ptr = s.as_mut_ptr();\n    let len = s.len();\n    let capacity = s.capacity();\n\n    let s = String::from_raw_parts(ptr, len, capacity);\n\n    assert_eq!(String::from(\"hello\"), s);\n}
\n
1.0.0 · source

pub unsafe fn from_utf8_unchecked(bytes: Vec<u8>) -> String

Converts a vector of bytes to a String without checking that the\nstring contains valid UTF-8.

\n

See the safe version, from_utf8, for more details.

\n
§Safety
\n

This function is unsafe because it does not check that the bytes passed\nto it are valid UTF-8. If this constraint is violated, it may cause\nmemory unsafety issues with future users of the String, as the rest of\nthe standard library assumes that Strings are valid UTF-8.

\n
§Examples
\n
// some bytes, in a vector\nlet sparkle_heart = vec![240, 159, 146, 150];\n\nlet sparkle_heart = unsafe {\n    String::from_utf8_unchecked(sparkle_heart)\n};\n\nassert_eq!(\"💖\", sparkle_heart);
\n
1.0.0 · source

pub fn into_bytes(self) -> Vec<u8>

Converts a String into a byte vector.

\n

This consumes the String, so we do not need to copy its contents.

\n
§Examples
\n
let s = String::from(\"hello\");\nlet bytes = s.into_bytes();\n\nassert_eq!(&[104, 101, 108, 108, 111][..], &bytes[..]);
\n
1.7.0 · source

pub fn as_str(&self) -> &str

Extracts a string slice containing the entire String.

\n
§Examples
\n
let s = String::from(\"foo\");\n\nassert_eq!(\"foo\", s.as_str());
\n
1.7.0 · source

pub fn as_mut_str(&mut self) -> &mut str

Converts a String into a mutable string slice.

\n
§Examples
\n
let mut s = String::from(\"foobar\");\nlet s_mut_str = s.as_mut_str();\n\ns_mut_str.make_ascii_uppercase();\n\nassert_eq!(\"FOOBAR\", s_mut_str);
\n
1.0.0 · source

pub fn push_str(&mut self, string: &str)

Appends a given string slice onto the end of this String.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.push_str(\"bar\");\n\nassert_eq!(\"foobar\", s);
\n
source

pub fn extend_from_within<R>(&mut self, src: R)
where\n R: RangeBounds<usize>,

🔬This is a nightly-only experimental API. (string_extend_from_within)

Copies elements from src range to the end of the string.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Examples
\n
#![feature(string_extend_from_within)]\nlet mut string = String::from(\"abcde\");\n\nstring.extend_from_within(2..);\nassert_eq!(string, \"abcdecde\");\n\nstring.extend_from_within(..2);\nassert_eq!(string, \"abcdecdeab\");\n\nstring.extend_from_within(4..8);\nassert_eq!(string, \"abcdecdeabecde\");
\n
1.0.0 · source

pub fn capacity(&self) -> usize

Returns this String’s capacity, in bytes.

\n
§Examples
\n
let s = String::with_capacity(10);\n\nassert!(s.capacity() >= 10);
\n
1.0.0 · source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional bytes more than the\ncurrent length. The allocator may reserve more space to speculatively\navoid frequent allocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new capacity overflows usize.

\n
§Examples
\n

Basic usage:

\n\n
let mut s = String::new();\n\ns.reserve(10);\n\nassert!(s.capacity() >= 10);
\n

This might not actually increase the capacity:

\n\n
let mut s = String::with_capacity(10);\ns.push('a');\ns.push('b');\n\n// s now has a length of 2 and a capacity of at least 10\nlet capacity = s.capacity();\nassert_eq!(2, s.len());\nassert!(capacity >= 10);\n\n// Since we already have at least an extra 8 capacity, calling this...\ns.reserve(8);\n\n// ... doesn't actually increase.\nassert_eq!(capacity, s.capacity());
\n
1.0.0 · source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for at least additional bytes more than\nthe current length. Unlike reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling reserve_exact, capacity will be greater than or equal to\nself.len() + additional. Does nothing if the capacity is already\nsufficient.

\n
§Panics
\n

Panics if the new capacity overflows usize.

\n
§Examples
\n

Basic usage:

\n\n
let mut s = String::new();\n\ns.reserve_exact(10);\n\nassert!(s.capacity() >= 10);
\n

This might not actually increase the capacity:

\n\n
let mut s = String::with_capacity(10);\ns.push('a');\ns.push('b');\n\n// s now has a length of 2 and a capacity of at least 10\nlet capacity = s.capacity();\nassert_eq!(2, s.len());\nassert!(capacity >= 10);\n\n// Since we already have at least an extra 8 capacity, calling this...\ns.reserve_exact(8);\n\n// ... doesn't actually increase.\nassert_eq!(capacity, s.capacity());
\n
1.57.0 · source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional bytes more than the\ncurrent length. The allocator may reserve more space to speculatively\navoid frequent allocations. After calling try_reserve, capacity will be\ngreater than or equal to self.len() + additional if it returns\nOk(()). Does nothing if capacity is already sufficient. This method\npreserves the contents even if an error occurs.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &str) -> Result<String, TryReserveError> {\n    let mut output = String::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.push_str(data);\n\n    Ok(output)\n}
\n
1.57.0 · source

pub fn try_reserve_exact(\n &mut self,\n additional: usize\n) -> Result<(), TryReserveError>

Tries to reserve the minimum capacity for at least additional bytes\nmore than the current length. Unlike try_reserve, this will not\ndeliberately over-allocate to speculatively avoid frequent allocations.\nAfter calling try_reserve_exact, capacity will be greater than or\nequal to self.len() + additional if it returns Ok(()).\nDoes nothing if the capacity is already sufficient.

\n

Note that the allocator may give the collection more space than it\nrequests. Therefore, capacity can not be relied upon to be precisely\nminimal. Prefer try_reserve if future insertions are expected.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::TryReserveError;\n\nfn process_data(data: &str) -> Result<String, TryReserveError> {\n    let mut output = String::new();\n\n    // Pre-reserve the memory, exiting if we can't\n    output.try_reserve_exact(data.len())?;\n\n    // Now we know this can't OOM in the middle of our complex work\n    output.push_str(data);\n\n    Ok(output)\n}
\n
1.0.0 · source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of this String to match its length.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.reserve(100);\nassert!(s.capacity() >= 100);\n\ns.shrink_to_fit();\nassert_eq!(3, s.capacity());
\n
1.56.0 · source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of this String with a lower bound.

\n

The capacity will remain at least as large as both the length\nand the supplied value.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.reserve(100);\nassert!(s.capacity() >= 100);\n\ns.shrink_to(10);\nassert!(s.capacity() >= 10);\ns.shrink_to(0);\nassert!(s.capacity() >= 3);
\n
1.0.0 · source

pub fn push(&mut self, ch: char)

Appends the given char to the end of this String.

\n
§Examples
\n
let mut s = String::from(\"abc\");\n\ns.push('1');\ns.push('2');\ns.push('3');\n\nassert_eq!(\"abc123\", s);
\n
1.0.0 · source

pub fn as_bytes(&self) -> &[u8]

Returns a byte slice of this String’s contents.

\n

The inverse of this method is from_utf8.

\n
§Examples
\n
let s = String::from(\"hello\");\n\nassert_eq!(&[104, 101, 108, 108, 111], s.as_bytes());
\n
1.0.0 · source

pub fn truncate(&mut self, new_len: usize)

Shortens this String to the specified length.

\n

If new_len is greater than the string’s current length, this has no\neffect.

\n

Note that this method has no effect on the allocated capacity\nof the string

\n
§Panics
\n

Panics if new_len does not lie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"hello\");\n\ns.truncate(2);\n\nassert_eq!(\"he\", s);
\n
1.0.0 · source

pub fn pop(&mut self) -> Option<char>

Removes the last character from the string buffer and returns it.

\n

Returns None if this String is empty.

\n
§Examples
\n
let mut s = String::from(\"abč\");\n\nassert_eq!(s.pop(), Some('č'));\nassert_eq!(s.pop(), Some('b'));\nassert_eq!(s.pop(), Some('a'));\n\nassert_eq!(s.pop(), None);
\n
1.0.0 · source

pub fn remove(&mut self, idx: usize) -> char

Removes a char from this String at a byte position and returns it.

\n

This is an O(n) operation, as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than or equal to the String’s length,\nor if it does not lie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"abç\");\n\nassert_eq!(s.remove(0), 'a');\nassert_eq!(s.remove(1), 'ç');\nassert_eq!(s.remove(0), 'b');
\n
source

pub fn remove_matches<P, 'a>(&'a mut self, pat: P)
where\n P: for<'x> Pattern<'x>,

🔬This is a nightly-only experimental API. (string_remove_matches)

Remove all matches of pattern pat in the String.

\n
§Examples
\n
#![feature(string_remove_matches)]\nlet mut s = String::from(\"Trees are not green, the sky is not blue.\");\ns.remove_matches(\"not \");\nassert_eq!(\"Trees are green, the sky is blue.\", s);
\n

Matches will be detected and removed iteratively, so in cases where\npatterns overlap, only the first pattern will be removed:

\n\n
#![feature(string_remove_matches)]\nlet mut s = String::from(\"banana\");\ns.remove_matches(\"ana\");\nassert_eq!(\"bna\", s);
\n
1.26.0 · source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(char) -> bool,

Retains only the characters specified by the predicate.

\n

In other words, remove all characters c such that f(c) returns false.\nThis method operates in place, visiting each character exactly once in the\noriginal order, and preserves the order of the retained characters.

\n
§Examples
\n
let mut s = String::from(\"f_o_ob_ar\");\n\ns.retain(|c| c != '_');\n\nassert_eq!(s, \"foobar\");
\n

Because the elements are visited exactly once in the original order,\nexternal state may be used to decide which elements to keep.

\n\n
let mut s = String::from(\"abcde\");\nlet keep = [false, true, true, false, true];\nlet mut iter = keep.iter();\ns.retain(|_| *iter.next().unwrap());\nassert_eq!(s, \"bce\");
\n
1.0.0 · source

pub fn insert(&mut self, idx: usize, ch: char)

Inserts a character into this String at a byte position.

\n

This is an O(n) operation as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than the String’s length, or if it does not\nlie on a char boundary.

\n
§Examples
\n
let mut s = String::with_capacity(3);\n\ns.insert(0, 'f');\ns.insert(1, 'o');\ns.insert(2, 'o');\n\nassert_eq!(\"foo\", s);
\n
1.16.0 · source

pub fn insert_str(&mut self, idx: usize, string: &str)

Inserts a string slice into this String at a byte position.

\n

This is an O(n) operation as it requires copying every element in the\nbuffer.

\n
§Panics
\n

Panics if idx is larger than the String’s length, or if it does not\nlie on a char boundary.

\n
§Examples
\n
let mut s = String::from(\"bar\");\n\ns.insert_str(0, \"foo\");\n\nassert_eq!(\"foobar\", s);
\n
1.0.0 · source

pub unsafe fn as_mut_vec(&mut self) -> &mut Vec<u8>

Returns a mutable reference to the contents of this String.

\n
§Safety
\n

This function is unsafe because the returned &mut Vec allows writing\nbytes which are not valid UTF-8. If this constraint is violated, using\nthe original String after dropping the &mut Vec may violate memory\nsafety, as the rest of the standard library assumes that Strings are\nvalid UTF-8.

\n
§Examples
\n
let mut s = String::from(\"hello\");\n\nunsafe {\n    let vec = s.as_mut_vec();\n    assert_eq!(&[104, 101, 108, 108, 111][..], &vec[..]);\n\n    vec.reverse();\n}\nassert_eq!(s, \"olleh\");
\n
1.0.0 · source

pub fn len(&self) -> usize

Returns the length of this String, in bytes, not chars or\ngraphemes. In other words, it might not be what a human considers the\nlength of the string.

\n
§Examples
\n
let a = String::from(\"foo\");\nassert_eq!(a.len(), 3);\n\nlet fancy_f = String::from(\"ƒoo\");\nassert_eq!(fancy_f.len(), 4);\nassert_eq!(fancy_f.chars().count(), 3);
\n
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if this String has a length of zero, and false otherwise.

\n
§Examples
\n
let mut v = String::new();\nassert!(v.is_empty());\n\nv.push('a');\nassert!(!v.is_empty());
\n
1.16.0 · source

pub fn split_off(&mut self, at: usize) -> String

Splits the string into two at the given byte index.

\n

Returns a newly allocated String. self contains bytes [0, at), and\nthe returned String contains bytes [at, len). at must be on the\nboundary of a UTF-8 code point.

\n

Note that the capacity of self does not change.

\n
§Panics
\n

Panics if at is not on a UTF-8 code point boundary, or if it is beyond the last\ncode point of the string.

\n
§Examples
\n
let mut hello = String::from(\"Hello, World!\");\nlet world = hello.split_off(7);\nassert_eq!(hello, \"Hello, \");\nassert_eq!(world, \"World!\");
\n
1.0.0 · source

pub fn clear(&mut self)

Truncates this String, removing all contents.

\n

While this means the String will have a length of zero, it does not\ntouch its capacity.

\n
§Examples
\n
let mut s = String::from(\"foo\");\n\ns.clear();\n\nassert!(s.is_empty());\nassert_eq!(0, s.len());\nassert_eq!(3, s.capacity());
\n
1.6.0 · source

pub fn drain<R>(&mut self, range: R) -> Drain<'_>
where\n R: RangeBounds<usize>,

Removes the specified range from the string in bulk, returning all\nremoved characters as an iterator.

\n

The returned iterator keeps a mutable borrow on the string to optimize\nits implementation.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Leaking
\n

If the returned iterator goes out of scope without being dropped (due to\ncore::mem::forget, for example), the string may still contain a copy\nof any drained characters, or may have lost characters arbitrarily,\nincluding characters outside the range.

\n
§Examples
\n
let mut s = String::from(\"α is alpha, β is beta\");\nlet beta_offset = s.find('β').unwrap_or(s.len());\n\n// Remove the range up until the β from the string\nlet t: String = s.drain(..beta_offset).collect();\nassert_eq!(t, \"α is alpha, \");\nassert_eq!(s, \"β is beta\");\n\n// A full range clears the string, like `clear()` does\ns.drain(..);\nassert_eq!(s, \"\");
\n
1.27.0 · source

pub fn replace_range<R>(&mut self, range: R, replace_with: &str)
where\n R: RangeBounds<usize>,

Removes the specified range in the string,\nand replaces it with the given string.\nThe given string doesn’t need to be the same length as the range.

\n
§Panics
\n

Panics if the starting point or end point do not lie on a char\nboundary, or if they’re out of bounds.

\n
§Examples
\n
let mut s = String::from(\"α is alpha, β is beta\");\nlet beta_offset = s.find('β').unwrap_or(s.len());\n\n// Replace the range up until the β from the string\ns.replace_range(..beta_offset, \"Α is capital alpha; \");\nassert_eq!(s, \"Α is capital alpha; β is beta\");
\n
1.4.0 · source

pub fn into_boxed_str(self) -> Box<str>

Converts this String into a Box<str>.

\n

This will drop any excess capacity.

\n
§Examples
\n
let s = String::from(\"hello\");\n\nlet b = s.into_boxed_str();
\n
1.72.0 · source

pub fn leak<'a>(self) -> &'a mut str

Consumes and leaks the String, returning a mutable reference to the contents,\n&'a mut str.

\n

The caller has free choice over the returned lifetime, including 'static. Indeed,\nthis function is ideally used for data that lives for the remainder of the program’s life,\nas dropping the returned reference will cause a memory leak.

\n

It does not reallocate or shrink the String,\nso the leaked allocation may include unused capacity that is not part\nof the returned slice. If you don’t want that, call into_boxed_str,\nand then Box::leak.

\n
§Examples
\n
let x = String::from(\"bucket\");\nlet static_ref: &'static mut str = x.leak();\nassert_eq!(static_ref, \"bucket\");
\n
",0,"mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.16.0 · source§

impl ToSocketAddrs for String

§

type Iter = IntoIter<SocketAddr>

Returned iterator over socket addresses which this type may correspond\nto.
source§

fn to_socket_addrs(&self) -> Result<IntoIter<SocketAddr>, Error>

Converts this object to an iterator of resolved SocketAddrs. Read more
","ToSocketAddrs","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl TryFrom<&Value<'_>> for String

§

type Error = Error

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

fn try_from(\n value: &Value<'_>\n) -> Result<String, <String as TryFrom<&Value<'_>>>::Error>

Performs the conversion.
","TryFrom<&Value<'_>>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl TryFrom<OwnedValue> for String

§

type Error = Error

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

fn try_from(\n v: OwnedValue\n) -> Result<String, <String as TryFrom<OwnedValue>>::Error>

Performs the conversion.
","TryFrom","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl<'a> TryFrom<Value<'a>> for String

§

type Error = Error

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

fn try_from(\n value: Value<'a>\n) -> Result<String, <String as TryFrom<Value<'a>>>::Error>

Performs the conversion.
","TryFrom>","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Type for String

§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
","Type","mpris_server::metadata::DateTime","mpris_server::Uri"],["
§

impl Value for String

§

fn record(&self, key: &Field, visitor: &mut dyn Visit)

Visits this value with the given Visitor.
","Value","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Write for String

source§

fn write_str(&mut self, s: &str) -> Result<(), Error>

Writes a string slice into this writer, returning whether the write\nsucceeded. Read more
source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more
","Write","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl Eq for String

","Eq","mpris_server::metadata::DateTime","mpris_server::Uri"],["
1.0.0 · source§

impl StructuralPartialEq for String

","StructuralPartialEq","mpris_server::metadata::DateTime","mpris_server::Uri"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/type.impl/zvariant/object_path/struct.OwnedObjectPath.js b/type.impl/zvariant/object_path/struct.OwnedObjectPath.js index 566079a..1eae72f 100644 --- a/type.impl/zvariant/object_path/struct.OwnedObjectPath.js +++ b/type.impl/zvariant/object_path/struct.OwnedObjectPath.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"mpris_server":[["
§

impl OwnedObjectPath

pub fn into_inner(self) -> ObjectPath<'static>

",0,"mpris_server::PlaylistId"],["
§

impl StructuralEq for OwnedObjectPath

","StructuralEq","mpris_server::PlaylistId"],["
§

impl Display for OwnedObjectPath

§

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

Formats the value using the given formatter. Read more
","Display","mpris_server::PlaylistId"],["
§

impl Eq for OwnedObjectPath

","Eq","mpris_server::PlaylistId"],["
§

impl PartialEq for OwnedObjectPath

§

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

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::PlaylistId"],["
§

impl Clone for OwnedObjectPath

§

fn clone(&self) -> OwnedObjectPath

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
","Clone","mpris_server::PlaylistId"],["
§

impl StructuralPartialEq for OwnedObjectPath

","StructuralPartialEq","mpris_server::PlaylistId"],["
§

impl Serialize for OwnedObjectPath

§

fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where\n __S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","mpris_server::PlaylistId"],["
§

impl<'a> From<ObjectPath<'a>> for OwnedObjectPath

§

fn from(o: ObjectPath<'a>) -> OwnedObjectPath

Converts to this type from the input type.
","From>","mpris_server::PlaylistId"],["
§

impl Debug for OwnedObjectPath

§

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

Formats the value using the given formatter. Read more
","Debug","mpris_server::PlaylistId"],["
§

impl Default for OwnedObjectPath

§

fn default() -> OwnedObjectPath

Returns the “default value” for a type. Read more
","Default","mpris_server::PlaylistId"],["
§

impl TryFrom<String> for OwnedObjectPath

§

type Error = Error

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

fn try_from(value: String) -> Result<OwnedObjectPath, Error>

Performs the conversion.
","TryFrom","mpris_server::PlaylistId"],["
§

impl TryFrom<OwnedValue> for OwnedObjectPath

§

type Error = Error

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

fn try_from(\n v: OwnedValue\n) -> Result<OwnedObjectPath, <OwnedObjectPath as TryFrom<OwnedValue>>::Error>

Performs the conversion.
","TryFrom","mpris_server::PlaylistId"],["
§

impl TryFrom<&str> for OwnedObjectPath

§

type Error = Error

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

fn try_from(value: &str) -> Result<OwnedObjectPath, Error>

Performs the conversion.
","TryFrom<&str>","mpris_server::PlaylistId"],["
§

impl TryFrom<Value<'_>> for OwnedObjectPath

§

type Error = Error

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

fn try_from(\n value: Value<'_>\n) -> Result<OwnedObjectPath, <OwnedObjectPath as TryFrom<Value<'_>>>::Error>

Performs the conversion.
","TryFrom>","mpris_server::PlaylistId"],["
§

impl Type for OwnedObjectPath

§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
","Type","mpris_server::PlaylistId"],["
§

impl Hash for OwnedObjectPath

§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","mpris_server::PlaylistId"],["
§

impl<'de> Deserialize<'de> for OwnedObjectPath

§

fn deserialize<D>(\n deserializer: D\n) -> Result<OwnedObjectPath, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","mpris_server::PlaylistId"],["
§

impl Deref for OwnedObjectPath

§

type Target = ObjectPath<'static>

The resulting type after dereferencing.
§

fn deref(&self) -> &<OwnedObjectPath as Deref>::Target

Dereferences the value.
","Deref","mpris_server::PlaylistId"]] +"mpris_server":[["
§

impl Basic for OwnedObjectPath

§

const SIGNATURE_CHAR: char = 'o'

The type signature, as a character.
§

const SIGNATURE_STR: &'static str = ObjectPath::SIGNATURE_STR

The type signature, as a string.
§

fn alignment(format: Format) -> usize

The required padding alignment for the given format.
","Basic","mpris_server::PlaylistId"],["
§

impl Clone for OwnedObjectPath

§

fn clone(&self) -> OwnedObjectPath

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
","Clone","mpris_server::PlaylistId"],["
§

impl Debug for OwnedObjectPath

§

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

Formats the value using the given formatter. Read more
","Debug","mpris_server::PlaylistId"],["
§

impl Default for OwnedObjectPath

§

fn default() -> OwnedObjectPath

Returns the “default value” for a type. Read more
","Default","mpris_server::PlaylistId"],["
§

impl Deref for OwnedObjectPath

§

type Target = ObjectPath<'static>

The resulting type after dereferencing.
§

fn deref(&self) -> &<OwnedObjectPath as Deref>::Target

Dereferences the value.
","Deref","mpris_server::PlaylistId"],["
§

impl<'de> Deserialize<'de> for OwnedObjectPath

§

fn deserialize<D>(\n deserializer: D\n) -> Result<OwnedObjectPath, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","mpris_server::PlaylistId"],["
§

impl Display for OwnedObjectPath

§

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

Formats the value using the given formatter. Read more
","Display","mpris_server::PlaylistId"],["
§

impl<'a> From<ObjectPath<'a>> for OwnedObjectPath

§

fn from(o: ObjectPath<'a>) -> OwnedObjectPath

Converts to this type from the input type.
","From>","mpris_server::PlaylistId"],["
§

impl Hash for OwnedObjectPath

§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","mpris_server::PlaylistId"],["
§

impl OwnedObjectPath

pub fn into_inner(self) -> ObjectPath<'static>

",0,"mpris_server::PlaylistId"],["
§

impl PartialEq for OwnedObjectPath

§

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

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","mpris_server::PlaylistId"],["
§

impl Serialize for OwnedObjectPath

§

fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where\n __S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","mpris_server::PlaylistId"],["
§

impl TryFrom<&str> for OwnedObjectPath

§

type Error = Error

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

fn try_from(value: &str) -> Result<OwnedObjectPath, Error>

Performs the conversion.
","TryFrom<&str>","mpris_server::PlaylistId"],["
§

impl TryFrom<OwnedValue> for OwnedObjectPath

§

type Error = Error

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

fn try_from(\n v: OwnedValue\n) -> Result<OwnedObjectPath, <OwnedObjectPath as TryFrom<OwnedValue>>::Error>

Performs the conversion.
","TryFrom","mpris_server::PlaylistId"],["
§

impl TryFrom<String> for OwnedObjectPath

§

type Error = Error

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

fn try_from(value: String) -> Result<OwnedObjectPath, Error>

Performs the conversion.
","TryFrom","mpris_server::PlaylistId"],["
§

impl TryFrom<Value<'_>> for OwnedObjectPath

§

type Error = Error

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

fn try_from(\n value: Value<'_>\n) -> Result<OwnedObjectPath, <OwnedObjectPath as TryFrom<Value<'_>>>::Error>

Performs the conversion.
","TryFrom>","mpris_server::PlaylistId"],["
§

impl Type for OwnedObjectPath

§

fn signature() -> Signature<'static>

Get the signature for the implementing type. Read more
","Type","mpris_server::PlaylistId"],["
§

impl Eq for OwnedObjectPath

","Eq","mpris_server::PlaylistId"],["
§

impl StructuralPartialEq for OwnedObjectPath

","StructuralPartialEq","mpris_server::PlaylistId"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file