Skip to content

Commit e82368d

Browse files
committed
Add examples to docs
Signed-off-by: Nick Cameron <[email protected]>
1 parent 17730e6 commit e82368d

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

library/core/src/any.rs

+76-2
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,10 @@
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 {
780780
pub 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")]
789818
pub fn request_value<'a, T, P>(provider: &'a P) -> Option<T>
790819
where
@@ -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")]
799841
pub fn request_ref<'a, T, P>(provider: &'a P) -> Option<&'a T>
800842
where
@@ -829,6 +871,22 @@ pub struct Demand<'a>(dyn Erased<'a> + 'a);
829871

830872
impl<'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

Comments
 (0)