134134//! }
135135//!
136136//! impl Provider for SomeConcreteType {
137- //! fn provide<'a>(&'a self, req : &mut Demand<'a>) {
137+ //! fn provide<'a>(&'a self, demand : &mut Demand<'a>) {
138138//! // Provide a string reference. We could provide multiple values with
139139//! // different types here.
140- //! req .provide_ref::<String>(&self.some_string);
140+ //! demand .provide_ref::<String>(&self.some_string);
141141//! }
142142//! }
143143//!
@@ -780,11 +780,40 @@ pub const fn type_name_of_val<T: ?Sized>(_val: &T) -> &'static str {
780780pub trait Provider {
781781 /// Data providers should implement this method to provide *all* values they are able to
782782 /// provide by using `demand`.
783+ ///
784+ /// # Examples
785+ ///
786+ /// Provides a reference to a field with type `String` as a `&str`.
787+ ///
788+ /// ```rust
789+ /// # #![feature(provide_any)]
790+ /// use std::any::{Provider, Demand};
791+ /// # struct SomeConcreteType { field: String }
792+ ///
793+ /// impl Provider for SomeConcreteType {
794+ /// fn provide<'a>(&'a self, demand: &mut Demand<'a>) {
795+ /// demand.provide_ref::<str>(&self.field);
796+ /// }
797+ /// }
798+ /// ```
783799 #[ unstable( feature = "provide_any" , issue = "none" ) ]
784800 fn provide < ' a > ( & ' a self , demand : & mut Demand < ' a > ) ;
785801}
786802
787803/// Request a value from the `Provider`.
804+ ///
805+ /// # Examples
806+ ///
807+ /// Get a string value from a provider.
808+ ///
809+ /// ```rust
810+ /// # #![feature(provide_any)]
811+ /// use std::any::{Provider, request_value};
812+ ///
813+ /// fn get_string<P: Provider>(provider: &P) -> String {
814+ /// request_value::<String, _>(provider).unwrap()
815+ /// }
816+ /// ```
788817#[ unstable( feature = "provide_any" , issue = "none" ) ]
789818pub fn request_value < ' a , T , P > ( provider : & ' a P ) -> Option < T >
790819where
@@ -795,6 +824,19 @@ where
795824}
796825
797826/// Request a reference from the `Provider`.
827+ ///
828+ /// # Examples
829+ ///
830+ /// Get a string reference from a provider.
831+ ///
832+ /// ```rust
833+ /// # #![feature(provide_any)]
834+ /// use std::any::{Provider, request_ref};
835+ ///
836+ /// fn get_str<P: Provider>(provider: &P) -> &str {
837+ /// request_ref::<str, _>(provider).unwrap()
838+ /// }
839+ /// ```
798840#[ unstable( feature = "provide_any" , issue = "none" ) ]
799841pub fn request_ref < ' a , T , P > ( provider : & ' a P ) -> Option < & ' a T >
800842where
@@ -829,6 +871,22 @@ pub struct Demand<'a>(dyn Erased<'a> + 'a);
829871
830872impl < ' a > Demand < ' a > {
831873 /// Provide a value or other type with only static lifetimes.
874+ ///
875+ /// # Examples
876+ ///
877+ /// Provides a `String` by cloning.
878+ ///
879+ /// ```rust
880+ /// # #![feature(provide_any)]
881+ /// use std::any::{Provider, Demand};
882+ /// # struct SomeConcreteType { field: String }
883+ ///
884+ /// impl Provider for SomeConcreteType {
885+ /// fn provide<'a>(&'a self, demand: &mut Demand<'a>) {
886+ /// demand.provide_value::<String, _>(|| self.field.clone());
887+ /// }
888+ /// }
889+ /// ```
832890 #[ unstable( feature = "provide_any" , issue = "none" ) ]
833891 pub fn provide_value < T , F > ( & mut self , fulfil : F ) -> & mut Self
834892 where
@@ -840,6 +898,22 @@ impl<'a> Demand<'a> {
840898
841899 /// Provide a reference, note that the referee type must be bounded by `'static`,
842900 /// but may be unsized.
901+ ///
902+ /// # Examples
903+ ///
904+ /// Provides a reference to a field as a `&str`.
905+ ///
906+ /// ```rust
907+ /// # #![feature(provide_any)]
908+ /// use std::any::{Provider, Demand};
909+ /// # struct SomeConcreteType { field: String }
910+ ///
911+ /// impl Provider for SomeConcreteType {
912+ /// fn provide<'a>(&'a self, demand: &mut Demand<'a>) {
913+ /// demand.provide_ref::<str>(&self.field);
914+ /// }
915+ /// }
916+ /// ```
843917 #[ unstable( feature = "provide_any" , issue = "none" ) ]
844918 pub fn provide_ref < T : ?Sized + ' static > ( & mut self , value : & ' a T ) -> & mut Self {
845919 self . provide :: < tags:: Ref < tags:: MaybeSizedValue < T > > > ( value)
0 commit comments