134
134
//! }
135
135
//!
136
136
//! impl Provider for SomeConcreteType {
137
- //! fn provide<'a>(&'a self, req : &mut Demand<'a>) {
137
+ //! fn provide<'a>(&'a self, demand : &mut Demand<'a>) {
138
138
//! // Provide a string reference. We could provide multiple values with
139
139
//! // different types here.
140
- //! req .provide_ref::<String>(&self.some_string);
140
+ //! demand .provide_ref::<String>(&self.some_string);
141
141
//! }
142
142
//! }
143
143
//!
@@ -780,11 +780,40 @@ pub const fn type_name_of_val<T: ?Sized>(_val: &T) -> &'static str {
780
780
pub trait Provider {
781
781
/// Data providers should implement this method to provide *all* values they are able to
782
782
/// 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
+ /// ```
783
799
#[ unstable( feature = "provide_any" , issue = "none" ) ]
784
800
fn provide < ' a > ( & ' a self , demand : & mut Demand < ' a > ) ;
785
801
}
786
802
787
803
/// 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
+ /// ```
788
817
#[ unstable( feature = "provide_any" , issue = "none" ) ]
789
818
pub fn request_value < ' a , T , P > ( provider : & ' a P ) -> Option < T >
790
819
where
@@ -795,6 +824,19 @@ where
795
824
}
796
825
797
826
/// 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
+ /// ```
798
840
#[ unstable( feature = "provide_any" , issue = "none" ) ]
799
841
pub fn request_ref < ' a , T , P > ( provider : & ' a P ) -> Option < & ' a T >
800
842
where
@@ -829,6 +871,22 @@ pub struct Demand<'a>(dyn Erased<'a> + 'a);
829
871
830
872
impl < ' a > Demand < ' a > {
831
873
/// 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
+ /// ```
832
890
#[ unstable( feature = "provide_any" , issue = "none" ) ]
833
891
pub fn provide_value < T , F > ( & mut self , fulfil : F ) -> & mut Self
834
892
where
@@ -840,6 +898,22 @@ impl<'a> Demand<'a> {
840
898
841
899
/// Provide a reference, note that the referee type must be bounded by `'static`,
842
900
/// 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
+ /// ```
843
917
#[ unstable( feature = "provide_any" , issue = "none" ) ]
844
918
pub fn provide_ref < T : ?Sized + ' static > ( & mut self , value : & ' a T ) -> & mut Self {
845
919
self . provide :: < tags:: Ref < tags:: MaybeSizedValue < T > > > ( value)
0 commit comments