/rust/registry/src/index.crates.io-1949cf8c6b5b557f/yoke-0.8.1/src/zero_from.rs
Line | Count | Source |
1 | | // This file is part of ICU4X. For terms of use, please see the file |
2 | | // called LICENSE at the top level of the ICU4X source tree |
3 | | // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). |
4 | | |
5 | | use crate::Yoke; |
6 | | use crate::Yokeable; |
7 | | |
8 | | use core::ops::Deref; |
9 | | use stable_deref_trait::StableDeref; |
10 | | |
11 | | use crate::ZeroFrom; |
12 | | |
13 | | impl<Y, C> Yoke<Y, C> |
14 | | where |
15 | | Y: for<'a> Yokeable<'a>, |
16 | | for<'a> <Y as Yokeable<'a>>::Output: ZeroFrom<'a, <C as Deref>::Target>, |
17 | | C: StableDeref + Deref, |
18 | | <C as Deref>::Target: 'static, |
19 | | { |
20 | | /// Construct a [`Yoke`]`<Y, C>` from a cart implementing `StableDeref` by zero-copy cloning |
21 | | /// the cart to `Y` and then yokeing that object to the cart. |
22 | | /// |
23 | | /// The type `Y` must implement [`ZeroFrom`]`<C::Target>`. This trait is auto-implemented |
24 | | /// on many common types and can be custom implemented or derived in order to make it easier |
25 | | /// to construct a `Yoke`. |
26 | | /// |
27 | | /// # Example |
28 | | /// |
29 | | /// Attach to a cart: |
30 | | /// |
31 | | /// ``` |
32 | | /// use std::borrow::Cow; |
33 | | /// use yoke::Yoke; |
34 | | /// |
35 | | /// let yoke = Yoke::<Cow<'static, str>, String>::attach_to_zero_copy_cart( |
36 | | /// "demo".to_owned(), |
37 | | /// ); |
38 | | /// |
39 | | /// assert_eq!("demo", yoke.get()); |
40 | | /// ``` |
41 | 0 | pub fn attach_to_zero_copy_cart(cart: C) -> Self { |
42 | 0 | Yoke::<Y, C>::attach_to_cart(cart, |c| <Y as Yokeable>::Output::zero_from(c)) |
43 | 0 | } |
44 | | } |