0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31 // Copyright 201
0010: 34 20 54 68 65 20 52 75 73 74 20 50 72 6f 6a 65 4 The Rust Proje
0020: 63 74 20 44 65 76 65 6c 6f 70 65 72 73 2e 20 53 ct Developers. S
0030: 65 65 20 74 68 65 20 43 4f 50 59 52 49 47 48 54 ee the COPYRIGHT
0040: 0a 2f 2f 20 66 69 6c 65 20 61 74 20 74 68 65 20 .// file at the
0050: 74 6f 70 2d 6c 65 76 65 6c 20 64 69 72 65 63 74 top-level direct
0060: 6f 72 79 20 6f 66 20 74 68 69 73 20 64 69 73 74 ory of this dist
0070: 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 61 74 0a ribution and at.
0080: 2f 2f 20 68 74 74 70 3a 2f 2f 72 75 73 74 2d 6c // http://rust-l
0090: 61 6e 67 2e 6f 72 67 2f 43 4f 50 59 52 49 47 48 ang.org/COPYRIGH
00a0: 54 2e 0a 2f 2f 0a 2f 2f 20 4c 69 63 65 6e 73 65 T..//.// License
00b0: 64 20 75 6e 64 65 72 20 74 68 65 20 41 70 61 63 d under the Apac
00c0: 68 65 20 4c 69 63 65 6e 73 65 2c 20 56 65 72 73 he License, Vers
00d0: 69 6f 6e 20 32 2e 30 20 3c 4c 49 43 45 4e 53 45 ion 2.0 <LICENSE
00e0: 2d 41 50 41 43 48 45 20 6f 72 0a 2f 2f 20 68 74 -APACHE or.// ht
00f0: 74 70 3a 2f 2f 77 77 77 2e 61 70 61 63 68 65 2e tp://www.apache.
0100: 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4c 49 43 org/licenses/LIC
0110: 45 4e 53 45 2d 32 2e 30 3e 20 6f 72 20 74 68 65 ENSE-2.0> or the
0120: 20 4d 49 54 20 6c 69 63 65 6e 73 65 0a 2f 2f 20 MIT license.//
0130: 3c 4c 49 43 45 4e 53 45 2d 4d 49 54 20 6f 72 20 <LICENSE-MIT or
0140: 68 74 74 70 3a 2f 2f 6f 70 65 6e 73 6f 75 72 63 http://opensourc
0150: 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4d e.org/licenses/M
0160: 49 54 3e 2c 20 61 74 20 79 6f 75 72 0a 2f 2f 20 IT>, at your.//
0170: 6f 70 74 69 6f 6e 2e 20 54 68 69 73 20 66 69 6c option. This fil
0180: 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 6f 70 e may not be cop
0190: 69 65 64 2c 20 6d 6f 64 69 66 69 65 64 2c 20 6f ied, modified, o
01a0: 72 20 64 69 73 74 72 69 62 75 74 65 64 0a 2f 2f r distributed.//
01b0: 20 65 78 63 65 70 74 20 61 63 63 6f 72 64 69 6e except accordin
01c0: 67 20 74 6f 20 74 68 6f 73 65 20 74 65 72 6d 73 g to those terms
01d0: 2e 0a 0a 2f 2f 21 20 54 72 61 69 74 73 20 66 6f ...//! Traits fo
01e0: 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 62 65 r conversions be
01f0: 74 77 65 65 6e 20 74 79 70 65 73 2e 0a 2f 2f 21 tween types..//!
0200: 0a 2f 2f 21 20 54 68 65 20 74 72 61 69 74 73 20 .//! The traits
0210: 69 6e 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 70 in this module p
0220: 72 6f 76 69 64 65 20 61 20 67 65 6e 65 72 61 6c rovide a general
0230: 20 77 61 79 20 74 6f 20 74 61 6c 6b 20 61 62 6f way to talk abo
0240: 75 74 20 63 6f 6e 76 65 72 73 69 6f 6e 73 0a 2f ut conversions./
0250: 2f 21 20 66 72 6f 6d 20 6f 6e 65 20 74 79 70 65 /! from one type
0260: 20 74 6f 20 61 6e 6f 74 68 65 72 2e 20 54 68 65 to another. The
0270: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 73 74 61 y follow the sta
0280: 6e 64 61 72 64 20 52 75 73 74 20 63 6f 6e 76 65 ndard Rust conve
0290: 6e 74 69 6f 6e 73 20 6f 66 0a 2f 2f 21 20 60 61 ntions of.//! `a
02a0: 73 60 2f 60 69 6e 74 6f 60 2f 60 66 72 6f 6d 60 s`/`into`/`from`
02b0: 2e 0a 2f 2f 21 0a 2f 2f 21 20 4c 69 6b 65 20 6d ..//!.//! Like m
02c0: 61 6e 79 20 74 72 61 69 74 73 2c 20 74 68 65 73 any traits, thes
02d0: 65 20 61 72 65 20 6f 66 74 65 6e 20 75 73 65 64 e are often used
02e0: 20 61 73 20 62 6f 75 6e 64 73 20 66 6f 72 20 67 as bounds for g
02f0: 65 6e 65 72 69 63 20 66 75 6e 63 74 69 6f 6e 73 eneric functions
0300: 2c 20 74 6f 0a 2f 2f 21 20 73 75 70 70 6f 72 74 , to.//! support
0310: 20 61 72 67 75 6d 65 6e 74 73 20 6f 66 20 6d 75 arguments of mu
0320: 6c 74 69 70 6c 65 20 74 79 70 65 73 2e 0a 2f 2f ltiple types..//
0330: 21 0a 2f 2f 21 20 2d 20 49 6d 70 6c 20 74 68 65 !.//! - Impl the
0340: 20 60 41 73 2a 60 20 74 72 61 69 74 73 20 66 6f `As*` traits fo
0350: 72 20 72 65 66 65 72 65 6e 63 65 2d 74 6f 2d 72 r reference-to-r
0360: 65 66 65 72 65 6e 63 65 20 63 6f 6e 76 65 72 73 eference convers
0370: 69 6f 6e 73 0a 2f 2f 21 20 2d 20 49 6d 70 6c 20 ions.//! - Impl
0380: 74 68 65 20 5b 60 49 6e 74 6f 60 5d 20 74 72 61 the [`Into`] tra
0390: 69 74 20 77 68 65 6e 20 79 6f 75 20 77 61 6e 74 it when you want
03a0: 20 74 6f 20 63 6f 6e 73 75 6d 65 20 74 68 65 20 to consume the
03b0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 63 6f 6e value in the con
03c0: 76 65 72 73 69 6f 6e 0a 2f 2f 21 20 2d 20 54 68 version.//! - Th
03d0: 65 20 5b 60 46 72 6f 6d 60 5d 20 74 72 61 69 74 e [`From`] trait
03e0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 66 6c 65 is the most fle
03f0: 78 69 62 6c 65 2c 20 75 73 65 66 75 6c 20 66 6f xible, useful fo
0400: 72 20 76 61 6c 75 65 20 5f 61 6e 64 5f 20 72 65 r value _and_ re
0410: 66 65 72 65 6e 63 65 20 63 6f 6e 76 65 72 73 69 ference conversi
0420: 6f 6e 73 0a 2f 2f 21 20 2d 20 54 68 65 20 5b 60 ons.//! - The [`
0430: 54 72 79 46 72 6f 6d 60 5d 20 61 6e 64 20 5b 60 TryFrom`] and [`
0440: 54 72 79 49 6e 74 6f 60 5d 20 74 72 61 69 74 73 TryInto`] traits
0450: 20 62 65 68 61 76 65 20 6c 69 6b 65 20 5b 60 46 behave like [`F
0460: 72 6f 6d 60 5d 20 61 6e 64 20 5b 60 49 6e 74 6f rom`] and [`Into
0470: 60 5d 2c 20 62 75 74 20 61 6c 6c 6f 77 20 66 6f `], but allow fo
0480: 72 20 74 68 65 0a 2f 2f 21 20 20 20 63 6f 6e 76 r the.//! conv
0490: 65 72 73 69 6f 6e 20 74 6f 20 66 61 69 6c 0a 2f ersion to fail./
04a0: 2f 21 0a 2f 2f 21 20 41 73 20 61 20 6c 69 62 72 /!.//! As a libr
04b0: 61 72 79 20 61 75 74 68 6f 72 2c 20 79 6f 75 20 ary author, you
04c0: 73 68 6f 75 6c 64 20 70 72 65 66 65 72 20 69 6d should prefer im
04d0: 70 6c 65 6d 65 6e 74 69 6e 67 20 5b 60 46 72 6f plementing [`Fro
04e0: 6d 3c 54 3e 60 5d 5b 60 46 72 6f 6d 60 5d 20 6f m<T>`][`From`] o
04f0: 72 0a 2f 2f 21 20 5b 60 54 72 79 46 72 6f 6d 3c r.//! [`TryFrom<
0500: 54 3e 60 5d 5b 60 54 72 79 46 72 6f 6d 60 5d 20 T>`][`TryFrom`]
0510: 72 61 74 68 65 72 20 74 68 61 6e 20 5b 60 49 6e rather than [`In
0520: 74 6f 3c 55 3e 60 5d 5b 60 49 6e 74 6f 60 5d 20 to<U>`][`Into`]
0530: 6f 72 20 5b 60 54 72 79 49 6e 74 6f 3c 55 3e 60 or [`TryInto<U>`
0540: 5d 5b 60 54 72 79 49 6e 74 6f 60 5d 2c 0a 2f 2f ][`TryInto`],.//
0550: 21 20 61 73 20 5b 60 46 72 6f 6d 60 5d 20 61 6e ! as [`From`] an
0560: 64 20 5b 60 54 72 79 46 72 6f 6d 60 5d 20 70 72 d [`TryFrom`] pr
0570: 6f 76 69 64 65 20 67 72 65 61 74 65 72 20 66 6c ovide greater fl
0580: 65 78 69 62 69 6c 69 74 79 20 61 6e 64 20 6f 66 exibility and of
0590: 66 65 72 0a 2f 2f 21 20 65 71 75 69 76 61 6c 65 fer.//! equivale
05a0: 6e 74 20 5b 60 49 6e 74 6f 60 5d 20 6f 72 20 5b nt [`Into`] or [
05b0: 60 54 72 79 49 6e 74 6f 60 5d 20 69 6d 70 6c 65 `TryInto`] imple
05c0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 66 mentations for f
05d0: 72 65 65 2c 20 74 68 61 6e 6b 73 20 74 6f 20 61 ree, thanks to a
05e0: 20 62 6c 61 6e 6b 65 74 20 69 6d 70 6c 65 6d 65 blanket impleme
05f0: 6e 74 61 74 69 6f 6e 0a 2f 2f 21 20 69 6e 20 74 ntation.//! in t
0600: 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 he standard libr
0610: 61 72 79 2e 0a 2f 2f 21 0a 2f 2f 21 20 23 20 47 ary..//!.//! # G
0620: 65 6e 65 72 69 63 20 69 6d 70 6c 0a 2f 2f 21 0a eneric impl.//!.
0630: 2f 2f 21 20 2d 20 5b 60 41 73 52 65 66 60 5d 20 //! - [`AsRef`]
0640: 61 6e 64 20 5b 60 41 73 4d 75 74 60 5d 20 61 75 and [`AsMut`] au
0650: 74 6f 2d 64 65 72 65 66 65 72 65 6e 63 65 20 69 to-dereference i
0660: 66 20 74 68 65 20 69 6e 6e 65 72 20 74 79 70 65 f the inner type
0670: 20 69 73 20 61 20 72 65 66 65 72 65 6e 63 65 0a is a reference.
0680: 2f 2f 21 20 2d 20 5b 60 46 72 6f 6d 60 5d 60 3c //! - [`From`]`<
0690: 55 3e 20 66 6f 72 20 54 60 20 69 6d 70 6c 69 65 U> for T` implie
06a0: 73 20 5b 60 49 6e 74 6f 60 5d 60 3c 54 3e 20 66 s [`Into`]`<T> f
06b0: 6f 72 20 55 60 0a 2f 2f 21 20 2d 20 5b 60 54 72 or U`.//! - [`Tr
06c0: 79 46 72 6f 6d 60 5d 60 3c 55 3e 20 66 6f 72 20 yFrom`]`<U> for
06d0: 54 60 20 69 6d 70 6c 69 65 73 20 5b 60 54 72 79 T` implies [`Try
06e0: 49 6e 74 6f 60 5d 60 3c 54 3e 20 66 6f 72 20 55 Into`]`<T> for U
06f0: 60 0a 2f 2f 21 20 2d 20 5b 60 46 72 6f 6d 60 5d `.//! - [`From`]
0700: 20 61 6e 64 20 5b 60 49 6e 74 6f 60 5d 20 61 72 and [`Into`] ar
0710: 65 20 72 65 66 6c 65 78 69 76 65 2c 20 77 68 69 e reflexive, whi
0720: 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20 61 6c ch means that al
0730: 6c 20 74 79 70 65 73 20 63 61 6e 20 60 69 6e 74 l types can `int
0740: 6f 28 29 60 0a 2f 2f 21 20 20 20 74 68 65 6d 73 o()`.//! thems
0750: 65 6c 76 65 73 20 61 6e 64 20 60 66 72 6f 6d 28 elves and `from(
0760: 29 60 20 74 68 65 6d 73 65 6c 76 65 73 0a 2f 2f )` themselves.//
0770: 21 0a 2f 2f 21 20 53 65 65 20 65 61 63 68 20 74 !.//! See each t
0780: 72 61 69 74 20 66 6f 72 20 75 73 61 67 65 20 65 rait for usage e
0790: 78 61 6d 70 6c 65 73 2e 0a 2f 2f 21 0a 2f 2f 21 xamples..//!.//!
07a0: 20 5b 60 49 6e 74 6f 60 5d 3a 20 74 72 61 69 74 [`Into`]: trait
07b0: 2e 49 6e 74 6f 2e 68 74 6d 6c 0a 2f 2f 21 20 5b .Into.html.//! [
07c0: 60 46 72 6f 6d 60 5d 3a 20 74 72 61 69 74 2e 46 `From`]: trait.F
07d0: 72 6f 6d 2e 68 74 6d 6c 0a 2f 2f 21 20 5b 60 54 rom.html.//! [`T
07e0: 72 79 46 72 6f 6d 60 5d 3a 20 74 72 61 69 74 2e ryFrom`]: trait.
07f0: 54 72 79 46 72 6f 6d 2e 68 74 6d 6c 0a 2f 2f 21 TryFrom.html.//!
0800: 20 5b 60 54 72 79 49 6e 74 6f 60 5d 3a 20 74 72 [`TryInto`]: tr
0810: 61 69 74 2e 54 72 79 49 6e 74 6f 2e 68 74 6d 6c ait.TryInto.html
0820: 0a 2f 2f 21 20 5b 60 41 73 52 65 66 60 5d 3a 20 .//! [`AsRef`]:
0830: 74 72 61 69 74 2e 41 73 52 65 66 2e 68 74 6d 6c trait.AsRef.html
0840: 0a 2f 2f 21 20 5b 60 41 73 4d 75 74 60 5d 3a 20 .//! [`AsMut`]:
0850: 74 72 61 69 74 2e 41 73 4d 75 74 2e 68 74 6d 6c trait.AsMut.html
0860: 0a 0a 23 21 5b 73 74 61 62 6c 65 28 66 65 61 74 ..#![stable(feat
0870: 75 72 65 20 3d 20 22 72 75 73 74 31 22 2c 20 73 ure = "rust1", s
0880: 69 6e 63 65 20 3d 20 22 31 2e 30 2e 30 22 29 5d ince = "1.0.0")]
0890: 0a 0a 75 73 65 20 73 74 72 3a 3a 46 72 6f 6d 53 ..use str::FromS
08a0: 74 72 3b 0a 0a 2f 2f 2f 20 41 20 63 68 65 61 70 tr;../// A cheap
08b0: 2c 20 72 65 66 65 72 65 6e 63 65 2d 74 6f 2d 72 , reference-to-r
08c0: 65 66 65 72 65 6e 63 65 20 63 6f 6e 76 65 72 73 eference convers
08d0: 69 6f 6e 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 60 41 73 ion..///./// `As
08e0: 52 65 66 60 20 69 73 20 76 65 72 79 20 73 69 6d Ref` is very sim
08f0: 69 6c 61 72 20 74 6f 2c 20 62 75 74 20 64 69 66 ilar to, but dif
0900: 66 65 72 65 6e 74 20 74 68 61 6e 2c 20 5b 60 42 ferent than, [`B
0910: 6f 72 72 6f 77 60 5d 2e 20 53 65 65 0a 2f 2f 2f orrow`]. See.///
0920: 20 5b 74 68 65 20 62 6f 6f 6b 5d 5b 62 6f 6f 6b [the book][book
0930: 5d 20 66 6f 72 20 6d 6f 72 65 2e 0a 2f 2f 2f 0a ] for more..///.
0940: 2f 2f 2f 20 5b 62 6f 6f 6b 5d 3a 20 2e 2e 2f 2e /// [book]: ../.
0950: 2e 2f 62 6f 6f 6b 2f 62 6f 72 72 6f 77 2d 61 6e ./book/borrow-an
0960: 64 2d 61 73 72 65 66 2e 68 74 6d 6c 0a 2f 2f 2f d-asref.html.///
0970: 20 5b 60 42 6f 72 72 6f 77 60 5d 3a 20 2e 2e 2f [`Borrow`]: ../
0980: 2e 2e 2f 73 74 64 2f 62 6f 72 72 6f 77 2f 74 72 ../std/borrow/tr
0990: 61 69 74 2e 42 6f 72 72 6f 77 2e 68 74 6d 6c 0a ait.Borrow.html.
09a0: 2f 2f 2f 0a 2f 2f 2f 20 2a 2a 4e 6f 74 65 3a 20 ///./// **Note:
09b0: 74 68 69 73 20 74 72 61 69 74 20 6d 75 73 74 20 this trait must
09c0: 6e 6f 74 20 66 61 69 6c 2a 2a 2e 20 49 66 20 74 not fail**. If t
09d0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 63 61 he conversion ca
09e0: 6e 20 66 61 69 6c 2c 20 75 73 65 20 61 20 64 65 n fail, use a de
09f0: 64 69 63 61 74 65 64 20 6d 65 74 68 6f 64 20 77 dicated method w
0a00: 68 69 63 68 0a 2f 2f 2f 20 72 65 74 75 72 6e 73 hich./// returns
0a10: 20 61 6e 20 5b 60 4f 70 74 69 6f 6e 3c 54 3e 60 an [`Option<T>`
0a20: 5d 20 6f 72 20 61 20 5b 60 52 65 73 75 6c 74 3c ] or a [`Result<
0a30: 54 2c 20 45 3e 60 5d 2e 0a 2f 2f 2f 0a 2f 2f 2f T, E>`]..///.///
0a40: 20 5b 60 4f 70 74 69 6f 6e 3c 54 3e 60 5d 3a 20 [`Option<T>`]:
0a50: 2e 2e 2f 2e 2e 2f 73 74 64 2f 6f 70 74 69 6f 6e ../../std/option
0a60: 2f 65 6e 75 6d 2e 4f 70 74 69 6f 6e 2e 68 74 6d /enum.Option.htm
0a70: 6c 0a 2f 2f 2f 20 5b 60 52 65 73 75 6c 74 3c 54 l./// [`Result<T
0a80: 2c 20 45 3e 60 5d 3a 20 2e 2e 2f 2e 2e 2f 73 74 , E>`]: ../../st
0a90: 64 2f 72 65 73 75 6c 74 2f 65 6e 75 6d 2e 52 65 d/result/enum.Re
0aa0: 73 75 6c 74 2e 68 74 6d 6c 0a 2f 2f 2f 0a 2f 2f sult.html.///.//
0ab0: 2f 20 23 20 45 78 61 6d 70 6c 65 73 0a 2f 2f 2f / # Examples.///
0ac0: 0a 2f 2f 2f 20 42 6f 74 68 20 5b 60 53 74 72 69 ./// Both [`Stri
0ad0: 6e 67 60 5d 20 61 6e 64 20 60 26 73 74 72 60 20 ng`] and `&str`
0ae0: 69 6d 70 6c 65 6d 65 6e 74 20 60 41 73 52 65 66 implement `AsRef
0af0: 3c 73 74 72 3e 60 3a 0a 2f 2f 2f 0a 2f 2f 2f 20 <str>`:.///.///
0b00: 5b 60 53 74 72 69 6e 67 60 5d 3a 20 2e 2e 2f 2e [`String`]: ../.
0b10: 2e 2f 73 74 64 2f 73 74 72 69 6e 67 2f 73 74 72 ./std/string/str
0b20: 75 63 74 2e 53 74 72 69 6e 67 2e 68 74 6d 6c 0a uct.String.html.
0b30: 2f 2f 2f 0a 2f 2f 2f 20 60 60 60 0a 2f 2f 2f 20 ///./// ```.///
0b40: 66 6e 20 69 73 5f 68 65 6c 6c 6f 3c 54 3a 20 41 fn is_hello<T: A
0b50: 73 52 65 66 3c 73 74 72 3e 3e 28 73 3a 20 54 29 sRef<str>>(s: T)
0b60: 20 7b 0a 2f 2f 2f 20 20 20 20 61 73 73 65 72 74 {./// assert
0b70: 5f 65 71 21 28 22 68 65 6c 6c 6f 22 2c 20 73 2e _eq!("hello", s.
0b80: 61 73 5f 72 65 66 28 29 29 3b 0a 2f 2f 2f 20 7d as_ref());./// }
0b90: 0a 2f 2f 2f 0a 2f 2f 2f 20 6c 65 74 20 73 20 3d .///./// let s =
0ba0: 20 22 68 65 6c 6c 6f 22 3b 0a 2f 2f 2f 20 69 73 "hello";./// is
0bb0: 5f 68 65 6c 6c 6f 28 73 29 3b 0a 2f 2f 2f 0a 2f _hello(s);.///./
0bc0: 2f 2f 20 6c 65 74 20 73 20 3d 20 22 68 65 6c 6c // let s = "hell
0bd0: 6f 22 2e 74 6f 5f 73 74 72 69 6e 67 28 29 3b 0a o".to_string();.
0be0: 2f 2f 2f 20 69 73 5f 68 65 6c 6c 6f 28 73 29 3b /// is_hello(s);
0bf0: 0a 2f 2f 2f 20 60 60 60 0a 2f 2f 2f 0a 2f 2f 2f ./// ```.///.///
0c00: 20 23 20 47 65 6e 65 72 69 63 20 49 6d 70 6c 73 # Generic Impls
0c10: 0a 2f 2f 2f 0a 2f 2f 2f 20 2d 20 60 41 73 52 65 .///./// - `AsRe
0c20: 66 60 20 61 75 74 6f 2d 64 65 72 65 66 65 72 65 f` auto-derefere
0c30: 6e 63 65 73 20 69 66 20 74 68 65 20 69 6e 6e 65 nces if the inne
0c40: 72 20 74 79 70 65 20 69 73 20 61 20 72 65 66 65 r type is a refe
0c50: 72 65 6e 63 65 20 6f 72 20 61 20 6d 75 74 61 62 rence or a mutab
0c60: 6c 65 0a 2f 2f 2f 20 72 65 66 65 72 65 6e 63 65 le./// reference
0c70: 20 28 65 2e 67 2e 3a 20 60 66 6f 6f 2e 61 73 5f (e.g.: `foo.as_
0c80: 72 65 66 28 29 60 20 77 69 6c 6c 20 77 6f 72 6b ref()` will work
0c90: 20 74 68 65 20 73 61 6d 65 20 69 66 20 60 66 6f the same if `fo
0ca0: 6f 60 20 68 61 73 20 74 79 70 65 20 60 26 6d 75 o` has type `&mu
0cb0: 74 20 46 6f 6f 60 20 6f 72 20 60 26 26 6d 75 74 t Foo` or `&&mut
0cc0: 20 46 6f 6f 60 29 0a 2f 2f 2f 0a 23 5b 73 74 61 Foo`).///.#[sta
0cd0: 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 ble(feature = "r
0ce0: 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 ust1", since = "
0cf0: 31 2e 30 2e 30 22 29 5d 0a 70 75 62 20 74 72 61 1.0.0")].pub tra
0d00: 69 74 20 41 73 52 65 66 3c 54 3a 20 3f 53 69 7a it AsRef<T: ?Siz
0d10: 65 64 3e 20 7b 0a 20 20 20 20 2f 2f 2f 20 50 65 ed> {. /// Pe
0d20: 72 66 6f 72 6d 73 20 74 68 65 20 63 6f 6e 76 65 rforms the conve
0d30: 72 73 69 6f 6e 2e 0a 20 20 20 20 23 5b 73 74 61 rsion.. #[sta
0d40: 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 ble(feature = "r
0d50: 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 ust1", since = "
0d60: 31 2e 30 2e 30 22 29 5d 0a 20 20 20 20 66 6e 20 1.0.0")]. fn
0d70: 61 73 5f 72 65 66 28 26 73 65 6c 66 29 20 2d 3e as_ref(&self) ->
0d80: 20 26 54 3b 0a 7d 0a 0a 2f 2f 2f 20 41 20 63 68 &T;.}../// A ch
0d90: 65 61 70 2c 20 6d 75 74 61 62 6c 65 20 72 65 66 eap, mutable ref
0da0: 65 72 65 6e 63 65 2d 74 6f 2d 6d 75 74 61 62 6c erence-to-mutabl
0db0: 65 20 72 65 66 65 72 65 6e 63 65 20 63 6f 6e 76 e reference conv
0dc0: 65 72 73 69 6f 6e 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 ersion..///.///
0dd0: 2a 2a 4e 6f 74 65 3a 20 74 68 69 73 20 74 72 61 **Note: this tra
0de0: 69 74 20 6d 75 73 74 20 6e 6f 74 20 66 61 69 6c it must not fail
0df0: 2a 2a 2e 20 49 66 20 74 68 65 20 63 6f 6e 76 65 **. If the conve
0e00: 72 73 69 6f 6e 20 63 61 6e 20 66 61 69 6c 2c 20 rsion can fail,
0e10: 75 73 65 20 61 20 64 65 64 69 63 61 74 65 64 20 use a dedicated
0e20: 6d 65 74 68 6f 64 20 77 68 69 63 68 0a 2f 2f 2f method which.///
0e30: 20 72 65 74 75 72 6e 73 20 61 6e 20 5b 60 4f 70 returns an [`Op
0e40: 74 69 6f 6e 3c 54 3e 60 5d 20 6f 72 20 61 20 5b tion<T>`] or a [
0e50: 60 52 65 73 75 6c 74 3c 54 2c 20 45 3e 60 5d 2e `Result<T, E>`].
0e60: 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 4f 70 74 69 6f .///./// [`Optio
0e70: 6e 3c 54 3e 60 5d 3a 20 2e 2e 2f 2e 2e 2f 73 74 n<T>`]: ../../st
0e80: 64 2f 6f 70 74 69 6f 6e 2f 65 6e 75 6d 2e 4f 70 d/option/enum.Op
0e90: 74 69 6f 6e 2e 68 74 6d 6c 0a 2f 2f 2f 20 5b 60 tion.html./// [`
0ea0: 52 65 73 75 6c 74 3c 54 2c 20 45 3e 60 5d 3a 20 Result<T, E>`]:
0eb0: 2e 2e 2f 2e 2e 2f 73 74 64 2f 72 65 73 75 6c 74 ../../std/result
0ec0: 2f 65 6e 75 6d 2e 52 65 73 75 6c 74 2e 68 74 6d /enum.Result.htm
0ed0: 6c 0a 2f 2f 2f 0a 2f 2f 2f 20 23 20 45 78 61 6d l.///./// # Exam
0ee0: 70 6c 65 73 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 42 ples.///./// [`B
0ef0: 6f 78 3c 54 3e 60 5d 20 69 6d 70 6c 65 6d 65 6e ox<T>`] implemen
0f00: 74 73 20 60 41 73 4d 75 74 3c 54 3e 60 3a 0a 2f ts `AsMut<T>`:./
0f10: 2f 2f 0a 2f 2f 2f 20 5b 60 42 6f 78 3c 54 3e 60 //./// [`Box<T>`
0f20: 5d 3a 20 2e 2e 2f 2e 2e 2f 73 74 64 2f 62 6f 78 ]: ../../std/box
0f30: 65 64 2f 73 74 72 75 63 74 2e 42 6f 78 2e 68 74 ed/struct.Box.ht
0f40: 6d 6c 0a 2f 2f 2f 0a 2f 2f 2f 20 60 60 60 0a 2f ml.///./// ```./
0f50: 2f 2f 20 66 6e 20 61 64 64 5f 6f 6e 65 3c 54 3a // fn add_one<T:
0f60: 20 41 73 4d 75 74 3c 75 36 34 3e 3e 28 6e 75 6d AsMut<u64>>(num
0f70: 3a 20 26 6d 75 74 20 54 29 20 7b 0a 2f 2f 2f 20 : &mut T) {.///
0f80: 20 20 20 20 2a 6e 75 6d 2e 61 73 5f 6d 75 74 28 *num.as_mut(
0f90: 29 20 2b 3d 20 31 3b 0a 2f 2f 2f 20 7d 0a 2f 2f ) += 1;./// }.//
0fa0: 2f 0a 2f 2f 2f 20 6c 65 74 20 6d 75 74 20 62 6f /./// let mut bo
0fb0: 78 65 64 5f 6e 75 6d 20 3d 20 42 6f 78 3a 3a 6e xed_num = Box::n
0fc0: 65 77 28 30 29 3b 0a 2f 2f 2f 20 61 64 64 5f 6f ew(0);./// add_o
0fd0: 6e 65 28 26 6d 75 74 20 62 6f 78 65 64 5f 6e 75 ne(&mut boxed_nu
0fe0: 6d 29 3b 0a 2f 2f 2f 20 61 73 73 65 72 74 5f 65 m);./// assert_e
0ff0: 71 21 28 2a 62 6f 78 65 64 5f 6e 75 6d 2c 20 31 q!(*boxed_num, 1
1000: 29 3b 0a 2f 2f 2f 20 60 60 60 0a 2f 2f 2f 0a 2f );./// ```.///./
1010: 2f 2f 20 23 20 47 65 6e 65 72 69 63 20 49 6d 70 // # Generic Imp
1020: 6c 73 0a 2f 2f 2f 0a 2f 2f 2f 20 2d 20 60 41 73 ls.///./// - `As
1030: 4d 75 74 60 20 61 75 74 6f 2d 64 65 72 65 66 65 Mut` auto-derefe
1040: 72 65 6e 63 65 73 20 69 66 20 74 68 65 20 69 6e rences if the in
1050: 6e 65 72 20 74 79 70 65 20 69 73 20 61 20 72 65 ner type is a re
1060: 66 65 72 65 6e 63 65 20 6f 72 20 61 20 6d 75 74 ference or a mut
1070: 61 62 6c 65 0a 2f 2f 2f 20 72 65 66 65 72 65 6e able./// referen
1080: 63 65 20 28 65 2e 67 2e 3a 20 60 66 6f 6f 2e 61 ce (e.g.: `foo.a
1090: 73 5f 72 65 66 28 29 60 20 77 69 6c 6c 20 77 6f s_ref()` will wo
10a0: 72 6b 20 74 68 65 20 73 61 6d 65 20 69 66 20 60 rk the same if `
10b0: 66 6f 6f 60 20 68 61 73 20 74 79 70 65 20 60 26 foo` has type `&
10c0: 6d 75 74 20 46 6f 6f 60 20 6f 72 20 60 26 26 6d mut Foo` or `&&m
10d0: 75 74 20 46 6f 6f 60 29 0a 2f 2f 2f 0a 23 5b 73 ut Foo`).///.#[s
10e0: 74 61 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 table(feature =
10f0: 22 72 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d "rust1", since =
1100: 20 22 31 2e 30 2e 30 22 29 5d 0a 70 75 62 20 74 "1.0.0")].pub t
1110: 72 61 69 74 20 41 73 4d 75 74 3c 54 3a 20 3f 53 rait AsMut<T: ?S
1120: 69 7a 65 64 3e 20 7b 0a 20 20 20 20 2f 2f 2f 20 ized> {. ///
1130: 50 65 72 66 6f 72 6d 73 20 74 68 65 20 63 6f 6e Performs the con
1140: 76 65 72 73 69 6f 6e 2e 0a 20 20 20 20 23 5b 73 version.. #[s
1150: 74 61 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 table(feature =
1160: 22 72 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d "rust1", since =
1170: 20 22 31 2e 30 2e 30 22 29 5d 0a 20 20 20 20 66 "1.0.0")]. f
1180: 6e 20 61 73 5f 6d 75 74 28 26 6d 75 74 20 73 65 n as_mut(&mut se
1190: 6c 66 29 20 2d 3e 20 26 6d 75 74 20 54 3b 0a 7d lf) -> &mut T;.}
11a0: 0a 0a 2f 2f 2f 20 41 20 63 6f 6e 76 65 72 73 69 ../// A conversi
11b0: 6f 6e 20 74 68 61 74 20 63 6f 6e 73 75 6d 65 73 on that consumes
11c0: 20 60 73 65 6c 66 60 2c 20 77 68 69 63 68 20 6d `self`, which m
11d0: 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 ay or may not be
11e0: 20 65 78 70 65 6e 73 69 76 65 2e 0a 2f 2f 2f 0a expensive..///.
11f0: 2f 2f 2f 20 2a 2a 4e 6f 74 65 3a 20 74 68 69 73 /// **Note: this
1200: 20 74 72 61 69 74 20 6d 75 73 74 20 6e 6f 74 20 trait must not
1210: 66 61 69 6c 2a 2a 2e 20 49 66 20 74 68 65 20 63 fail**. If the c
1220: 6f 6e 76 65 72 73 69 6f 6e 20 63 61 6e 20 66 61 onversion can fa
1230: 69 6c 2c 20 75 73 65 20 5b 60 54 72 79 49 6e 74 il, use [`TryInt
1240: 6f 60 5d 20 6f 72 20 61 20 64 65 64 69 63 61 74 o`] or a dedicat
1250: 65 64 0a 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 68 ed./// method wh
1260: 69 63 68 20 72 65 74 75 72 6e 73 20 61 6e 20 5b ich returns an [
1270: 60 4f 70 74 69 6f 6e 3c 54 3e 60 5d 20 6f 72 20 `Option<T>`] or
1280: 61 20 5b 60 52 65 73 75 6c 74 3c 54 2c 20 45 3e a [`Result<T, E>
1290: 60 5d 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 4c 69 62 72 `]..///./// Libr
12a0: 61 72 79 20 61 75 74 68 6f 72 73 20 73 68 6f 75 ary authors shou
12b0: 6c 64 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 ld not directly
12c0: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 69 73 20 74 implement this t
12d0: 72 61 69 74 2c 20 62 75 74 20 73 68 6f 75 6c 64 rait, but should
12e0: 20 70 72 65 66 65 72 20 69 6d 70 6c 65 6d 65 6e prefer implemen
12f0: 74 69 6e 67 0a 2f 2f 2f 20 74 68 65 20 5b 60 46 ting./// the [`F
1300: 72 6f 6d 60 5d 5b 46 72 6f 6d 5d 20 74 72 61 69 rom`][From] trai
1310: 74 2c 20 77 68 69 63 68 20 6f 66 66 65 72 73 20 t, which offers
1320: 67 72 65 61 74 65 72 20 66 6c 65 78 69 62 69 6c greater flexibil
1330: 69 74 79 20 61 6e 64 20 70 72 6f 76 69 64 65 73 ity and provides
1340: 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 60 an equivalent `
1350: 49 6e 74 6f 60 0a 2f 2f 2f 20 69 6d 70 6c 65 6d Into`./// implem
1360: 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 66 72 65 entation for fre
1370: 65 2c 20 74 68 61 6e 6b 73 20 74 6f 20 61 20 62 e, thanks to a b
1380: 6c 61 6e 6b 65 74 20 69 6d 70 6c 65 6d 65 6e 74 lanket implement
1390: 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 73 74 61 ation in the sta
13a0: 6e 64 61 72 64 20 6c 69 62 72 61 72 79 2e 0a 2f ndard library../
13b0: 2f 2f 0a 2f 2f 2f 20 23 20 45 78 61 6d 70 6c 65 //./// # Example
13c0: 73 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 53 74 72 69 s.///./// [`Stri
13d0: 6e 67 60 5d 20 69 6d 70 6c 65 6d 65 6e 74 73 20 ng`] implements
13e0: 60 49 6e 74 6f 3c 56 65 63 3c 75 38 3e 3e 60 3a `Into<Vec<u8>>`:
13f0: 0a 2f 2f 2f 0a 2f 2f 2f 20 60 60 60 0a 2f 2f 2f .///./// ```.///
1400: 20 66 6e 20 69 73 5f 68 65 6c 6c 6f 3c 54 3a 20 fn is_hello<T:
1410: 49 6e 74 6f 3c 56 65 63 3c 75 38 3e 3e 3e 28 73 Into<Vec<u8>>>(s
1420: 3a 20 54 29 20 7b 0a 2f 2f 2f 20 20 20 20 6c 65 : T) {./// le
1430: 74 20 62 79 74 65 73 20 3d 20 62 22 68 65 6c 6c t bytes = b"hell
1440: 6f 22 2e 74 6f 5f 76 65 63 28 29 3b 0a 2f 2f 2f o".to_vec();.///
1450: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 62 assert_eq!(b
1460: 79 74 65 73 2c 20 73 2e 69 6e 74 6f 28 29 29 3b ytes, s.into());
1470: 0a 2f 2f 2f 20 7d 0a 2f 2f 2f 0a 2f 2f 2f 20 6c ./// }.///./// l
1480: 65 74 20 73 20 3d 20 22 68 65 6c 6c 6f 22 2e 74 et s = "hello".t
1490: 6f 5f 73 74 72 69 6e 67 28 29 3b 0a 2f 2f 2f 20 o_string();.///
14a0: 69 73 5f 68 65 6c 6c 6f 28 73 29 3b 0a 2f 2f 2f is_hello(s);.///
14b0: 20 60 60 60 0a 2f 2f 2f 0a 2f 2f 2f 20 23 20 47 ```.///./// # G
14c0: 65 6e 65 72 69 63 20 49 6d 70 6c 73 0a 2f 2f 2f eneric Impls.///
14d0: 0a 2f 2f 2f 20 2d 20 5b 60 46 72 6f 6d 3c 54 3e ./// - [`From<T>
14e0: 60 5d 5b 46 72 6f 6d 5d 60 20 66 6f 72 20 55 60 `][From]` for U`
14f0: 20 69 6d 70 6c 69 65 73 20 60 49 6e 74 6f 3c 55 implies `Into<U
1500: 3e 20 66 6f 72 20 54 60 0a 2f 2f 2f 20 2d 20 5b > for T`./// - [
1510: 60 69 6e 74 6f 60 5d 20 69 73 20 72 65 66 6c 65 `into`] is refle
1520: 78 69 76 65 2c 20 77 68 69 63 68 20 6d 65 61 6e xive, which mean
1530: 73 20 74 68 61 74 20 60 49 6e 74 6f 3c 54 3e 20 s that `Into<T>
1540: 66 6f 72 20 54 60 20 69 73 20 69 6d 70 6c 65 6d for T` is implem
1550: 65 6e 74 65 64 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 ented.///./// [`
1560: 54 72 79 49 6e 74 6f 60 5d 3a 20 74 72 61 69 74 TryInto`]: trait
1570: 2e 54 72 79 49 6e 74 6f 2e 68 74 6d 6c 0a 2f 2f .TryInto.html.//
1580: 2f 20 5b 60 4f 70 74 69 6f 6e 3c 54 3e 60 5d 3a / [`Option<T>`]:
1590: 20 2e 2e 2f 2e 2e 2f 73 74 64 2f 6f 70 74 69 6f ../../std/optio
15a0: 6e 2f 65 6e 75 6d 2e 4f 70 74 69 6f 6e 2e 68 74 n/enum.Option.ht
15b0: 6d 6c 0a 2f 2f 2f 20 5b 60 52 65 73 75 6c 74 3c ml./// [`Result<
15c0: 54 2c 20 45 3e 60 5d 3a 20 2e 2e 2f 2e 2e 2f 73 T, E>`]: ../../s
15d0: 74 64 2f 72 65 73 75 6c 74 2f 65 6e 75 6d 2e 52 td/result/enum.R
15e0: 65 73 75 6c 74 2e 68 74 6d 6c 0a 2f 2f 2f 20 5b esult.html./// [
15f0: 60 53 74 72 69 6e 67 60 5d 3a 20 2e 2e 2f 2e 2e `String`]: ../..
1600: 2f 73 74 64 2f 73 74 72 69 6e 67 2f 73 74 72 75 /std/string/stru
1610: 63 74 2e 53 74 72 69 6e 67 2e 68 74 6d 6c 0a 2f ct.String.html./
1620: 2f 2f 20 5b 46 72 6f 6d 5d 3a 20 74 72 61 69 74 // [From]: trait
1630: 2e 46 72 6f 6d 2e 68 74 6d 6c 0a 2f 2f 2f 20 5b .From.html./// [
1640: 60 69 6e 74 6f 60 5d 3a 20 74 72 61 69 74 2e 49 `into`]: trait.I
1650: 6e 74 6f 2e 68 74 6d 6c 23 74 79 6d 65 74 68 6f nto.html#tymetho
1660: 64 2e 69 6e 74 6f 0a 23 5b 73 74 61 62 6c 65 28 d.into.#[stable(
1670: 66 65 61 74 75 72 65 20 3d 20 22 72 75 73 74 31 feature = "rust1
1680: 22 2c 20 73 69 6e 63 65 20 3d 20 22 31 2e 30 2e ", since = "1.0.
1690: 30 22 29 5d 0a 70 75 62 20 74 72 61 69 74 20 49 0")].pub trait I
16a0: 6e 74 6f 3c 54 3e 3a 20 53 69 7a 65 64 20 7b 0a nto<T>: Sized {.
16b0: 20 20 20 20 2f 2f 2f 20 50 65 72 66 6f 72 6d 73 /// Performs
16c0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e the conversion.
16d0: 0a 20 20 20 20 23 5b 73 74 61 62 6c 65 28 66 65 . #[stable(fe
16e0: 61 74 75 72 65 20 3d 20 22 72 75 73 74 31 22 2c ature = "rust1",
16f0: 20 73 69 6e 63 65 20 3d 20 22 31 2e 30 2e 30 22 since = "1.0.0"
1700: 29 5d 0a 20 20 20 20 66 6e 20 69 6e 74 6f 28 73 )]. fn into(s
1710: 65 6c 66 29 20 2d 3e 20 54 3b 0a 7d 0a 0a 2f 2f elf) -> T;.}..//
1720: 2f 20 43 6f 6e 73 74 72 75 63 74 20 60 53 65 6c / Construct `Sel
1730: 66 60 20 76 69 61 20 61 20 63 6f 6e 76 65 72 73 f` via a convers
1740: 69 6f 6e 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 2a 2a 4e ion..///./// **N
1750: 6f 74 65 3a 20 74 68 69 73 20 74 72 61 69 74 20 ote: this trait
1760: 6d 75 73 74 20 6e 6f 74 20 66 61 69 6c 2a 2a 2e must not fail**.
1770: 20 49 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 If the conversi
1780: 6f 6e 20 63 61 6e 20 66 61 69 6c 2c 20 75 73 65 on can fail, use
1790: 20 5b 60 54 72 79 46 72 6f 6d 60 5d 20 6f 72 20 [`TryFrom`] or
17a0: 61 20 64 65 64 69 63 61 74 65 64 0a 2f 2f 2f 20 a dedicated.///
17b0: 6d 65 74 68 6f 64 20 77 68 69 63 68 20 72 65 74 method which ret
17c0: 75 72 6e 73 20 61 6e 20 5b 60 4f 70 74 69 6f 6e urns an [`Option
17d0: 3c 54 3e 60 5d 20 6f 72 20 61 20 5b 60 52 65 73 <T>`] or a [`Res
17e0: 75 6c 74 3c 54 2c 20 45 3e 60 5d 2e 0a 2f 2f 2f ult<T, E>`]..///
17f0: 0a 2f 2f 2f 20 23 20 45 78 61 6d 70 6c 65 73 0a ./// # Examples.
1800: 2f 2f 2f 0a 2f 2f 2f 20 5b 60 53 74 72 69 6e 67 ///./// [`String
1810: 60 5d 20 69 6d 70 6c 65 6d 65 6e 74 73 20 60 46 `] implements `F
1820: 72 6f 6d 3c 26 73 74 72 3e 60 3a 0a 2f 2f 2f 0a rom<&str>`:.///.
1830: 2f 2f 2f 20 60 60 60 0a 2f 2f 2f 20 6c 65 74 20 /// ```./// let
1840: 73 74 72 69 6e 67 20 3d 20 22 68 65 6c 6c 6f 22 string = "hello"
1850: 2e 74 6f 5f 73 74 72 69 6e 67 28 29 3b 0a 2f 2f .to_string();.//
1860: 2f 20 6c 65 74 20 6f 74 68 65 72 5f 73 74 72 69 / let other_stri
1870: 6e 67 20 3d 20 53 74 72 69 6e 67 3a 3a 66 72 6f ng = String::fro
1880: 6d 28 22 68 65 6c 6c 6f 22 29 3b 0a 2f 2f 2f 0a m("hello");.///.
1890: 2f 2f 2f 20 61 73 73 65 72 74 5f 65 71 21 28 73 /// assert_eq!(s
18a0: 74 72 69 6e 67 2c 20 6f 74 68 65 72 5f 73 74 72 tring, other_str
18b0: 69 6e 67 29 3b 0a 2f 2f 2f 20 60 60 60 0a 2f 2f ing);./// ```.//
18c0: 2f 20 23 20 47 65 6e 65 72 69 63 20 69 6d 70 6c / # Generic impl
18d0: 73 0a 2f 2f 2f 0a 2f 2f 2f 20 2d 20 60 46 72 6f s.///./// - `Fro
18e0: 6d 3c 54 3e 20 66 6f 72 20 55 60 20 69 6d 70 6c m<T> for U` impl
18f0: 69 65 73 20 5b 60 49 6e 74 6f 3c 55 3e 60 5d 60 ies [`Into<U>`]`
1900: 20 66 6f 72 20 54 60 0a 2f 2f 2f 20 2d 20 5b 60 for T`./// - [`
1910: 66 72 6f 6d 60 5d 20 69 73 20 72 65 66 6c 65 78 from`] is reflex
1920: 69 76 65 2c 20 77 68 69 63 68 20 6d 65 61 6e 73 ive, which means
1930: 20 74 68 61 74 20 60 46 72 6f 6d 3c 54 3e 20 66 that `From<T> f
1940: 6f 72 20 54 60 20 69 73 20 69 6d 70 6c 65 6d 65 or T` is impleme
1950: 6e 74 65 64 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 54 nted.///./// [`T
1960: 72 79 46 72 6f 6d 60 5d 3a 20 74 72 61 69 74 2e ryFrom`]: trait.
1970: 54 72 79 46 72 6f 6d 2e 68 74 6d 6c 0a 2f 2f 2f TryFrom.html.///
1980: 20 5b 60 4f 70 74 69 6f 6e 3c 54 3e 60 5d 3a 20 [`Option<T>`]:
1990: 2e 2e 2f 2e 2e 2f 73 74 64 2f 6f 70 74 69 6f 6e ../../std/option
19a0: 2f 65 6e 75 6d 2e 4f 70 74 69 6f 6e 2e 68 74 6d /enum.Option.htm
19b0: 6c 0a 2f 2f 2f 20 5b 60 52 65 73 75 6c 74 3c 54 l./// [`Result<T
19c0: 2c 20 45 3e 60 5d 3a 20 2e 2e 2f 2e 2e 2f 73 74 , E>`]: ../../st
19d0: 64 2f 72 65 73 75 6c 74 2f 65 6e 75 6d 2e 52 65 d/result/enum.Re
19e0: 73 75 6c 74 2e 68 74 6d 6c 0a 2f 2f 2f 20 5b 60 sult.html./// [`
19f0: 53 74 72 69 6e 67 60 5d 3a 20 2e 2e 2f 2e 2e 2f String`]: ../../
1a00: 73 74 64 2f 73 74 72 69 6e 67 2f 73 74 72 75 63 std/string/struc
1a10: 74 2e 53 74 72 69 6e 67 2e 68 74 6d 6c 0a 2f 2f t.String.html.//
1a20: 2f 20 5b 60 49 6e 74 6f 3c 55 3e 60 5d 3a 20 74 / [`Into<U>`]: t
1a30: 72 61 69 74 2e 49 6e 74 6f 2e 68 74 6d 6c 0a 2f rait.Into.html./
1a40: 2f 2f 20 5b 60 66 72 6f 6d 60 5d 3a 20 74 72 61 // [`from`]: tra
1a50: 69 74 2e 46 72 6f 6d 2e 68 74 6d 6c 23 74 79 6d it.From.html#tym
1a60: 65 74 68 6f 64 2e 66 72 6f 6d 0a 23 5b 73 74 61 ethod.from.#[sta
1a70: 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 ble(feature = "r
1a80: 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 ust1", since = "
1a90: 31 2e 30 2e 30 22 29 5d 0a 70 75 62 20 74 72 61 1.0.0")].pub tra
1aa0: 69 74 20 46 72 6f 6d 3c 54 3e 3a 20 53 69 7a 65 it From<T>: Size
1ab0: 64 20 7b 0a 20 20 20 20 2f 2f 2f 20 50 65 72 66 d {. /// Perf
1ac0: 6f 72 6d 73 20 74 68 65 20 63 6f 6e 76 65 72 73 orms the convers
1ad0: 69 6f 6e 2e 0a 20 20 20 20 23 5b 73 74 61 62 6c ion.. #[stabl
1ae0: 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 75 73 e(feature = "rus
1af0: 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 31 2e t1", since = "1.
1b00: 30 2e 30 22 29 5d 0a 20 20 20 20 66 6e 20 66 72 0.0")]. fn fr
1b10: 6f 6d 28 54 29 20 2d 3e 20 53 65 6c 66 3b 0a 7d om(T) -> Self;.}
1b20: 0a 0a 2f 2f 2f 20 41 6e 20 61 74 74 65 6d 70 74 ../// An attempt
1b30: 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 ed conversion th
1b40: 61 74 20 63 6f 6e 73 75 6d 65 73 20 60 73 65 6c at consumes `sel
1b50: 66 60 2c 20 77 68 69 63 68 20 6d 61 79 20 6f 72 f`, which may or
1b60: 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 78 70 65 may not be expe
1b70: 6e 73 69 76 65 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 4c nsive..///./// L
1b80: 69 62 72 61 72 79 20 61 75 74 68 6f 72 73 20 73 ibrary authors s
1b90: 68 6f 75 6c 64 20 6e 6f 74 20 64 69 72 65 63 74 hould not direct
1ba0: 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 69 ly implement thi
1bb0: 73 20 74 72 61 69 74 2c 20 62 75 74 20 73 68 6f s trait, but sho
1bc0: 75 6c 64 20 70 72 65 66 65 72 20 69 6d 70 6c 65 uld prefer imple
1bd0: 6d 65 6e 74 69 6e 67 0a 2f 2f 2f 20 74 68 65 20 menting./// the
1be0: 5b 60 54 72 79 46 72 6f 6d 60 5d 20 74 72 61 69 [`TryFrom`] trai
1bf0: 74 2c 20 77 68 69 63 68 20 6f 66 66 65 72 73 20 t, which offers
1c00: 67 72 65 61 74 65 72 20 66 6c 65 78 69 62 69 6c greater flexibil
1c10: 69 74 79 20 61 6e 64 20 70 72 6f 76 69 64 65 73 ity and provides
1c20: 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 60 an equivalent `
1c30: 54 72 79 49 6e 74 6f 60 0a 2f 2f 2f 20 69 6d 70 TryInto`./// imp
1c40: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 lementation for
1c50: 66 72 65 65 2c 20 74 68 61 6e 6b 73 20 74 6f 20 free, thanks to
1c60: 61 20 62 6c 61 6e 6b 65 74 20 69 6d 70 6c 65 6d a blanket implem
1c70: 65 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 entation in the
1c80: 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 standard library
1c90: 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 5b 60 54 72 79 46 ..///./// [`TryF
1ca0: 72 6f 6d 60 5d 3a 20 74 72 61 69 74 2e 54 72 79 rom`]: trait.Try
1cb0: 46 72 6f 6d 2e 68 74 6d 6c 0a 23 5b 75 6e 73 74 From.html.#[unst
1cc0: 61 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 22 able(feature = "
1cd0: 74 72 79 5f 66 72 6f 6d 22 2c 20 69 73 73 75 65 try_from", issue
1ce0: 20 3d 20 22 33 33 34 31 37 22 29 5d 0a 70 75 62 = "33417")].pub
1cf0: 20 74 72 61 69 74 20 54 72 79 49 6e 74 6f 3c 54 trait TryInto<T
1d00: 3e 3a 20 53 69 7a 65 64 20 7b 0a 20 20 20 20 2f >: Sized {. /
1d10: 2f 2f 20 54 68 65 20 74 79 70 65 20 72 65 74 75 // The type retu
1d20: 72 6e 65 64 20 69 6e 20 74 68 65 20 65 76 65 6e rned in the even
1d30: 74 20 6f 66 20 61 20 63 6f 6e 76 65 72 73 69 6f t of a conversio
1d40: 6e 20 65 72 72 6f 72 2e 0a 20 20 20 20 74 79 70 n error.. typ
1d50: 65 20 45 72 72 6f 72 3b 0a 0a 20 20 20 20 2f 2f e Error;.. //
1d60: 2f 20 50 65 72 66 6f 72 6d 73 20 74 68 65 20 63 / Performs the c
1d70: 6f 6e 76 65 72 73 69 6f 6e 2e 0a 20 20 20 20 66 onversion.. f
1d80: 6e 20 74 72 79 5f 69 6e 74 6f 28 73 65 6c 66 29 n try_into(self)
1d90: 20 2d 3e 20 52 65 73 75 6c 74 3c 54 2c 20 53 65 -> Result<T, Se
1da0: 6c 66 3a 3a 45 72 72 6f 72 3e 3b 0a 7d 0a 0a 2f lf::Error>;.}../
1db0: 2f 2f 20 41 74 74 65 6d 70 74 20 74 6f 20 63 6f // Attempt to co
1dc0: 6e 73 74 72 75 63 74 20 60 53 65 6c 66 60 20 76 nstruct `Self` v
1dd0: 69 61 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 2e ia a conversion.
1de0: 0a 23 5b 75 6e 73 74 61 62 6c 65 28 66 65 61 74 .#[unstable(feat
1df0: 75 72 65 20 3d 20 22 74 72 79 5f 66 72 6f 6d 22 ure = "try_from"
1e00: 2c 20 69 73 73 75 65 20 3d 20 22 33 33 34 31 37 , issue = "33417
1e10: 22 29 5d 0a 70 75 62 20 74 72 61 69 74 20 54 72 ")].pub trait Tr
1e20: 79 46 72 6f 6d 3c 54 3e 3a 20 53 69 7a 65 64 20 yFrom<T>: Sized
1e30: 7b 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 79 {. /// The ty
1e40: 70 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74 pe returned in t
1e50: 68 65 20 65 76 65 6e 74 20 6f 66 20 61 20 63 6f he event of a co
1e60: 6e 76 65 72 73 69 6f 6e 20 65 72 72 6f 72 2e 0a nversion error..
1e70: 20 20 20 20 74 79 70 65 20 45 72 72 6f 72 3b 0a type Error;.
1e80: 0a 20 20 20 20 2f 2f 2f 20 50 65 72 66 6f 72 6d . /// Perform
1e90: 73 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e s the conversion
1ea0: 2e 0a 20 20 20 20 66 6e 20 74 72 79 5f 66 72 6f .. fn try_fro
1eb0: 6d 28 76 61 6c 75 65 3a 20 54 29 20 2d 3e 20 52 m(value: T) -> R
1ec0: 65 73 75 6c 74 3c 53 65 6c 66 2c 20 53 65 6c 66 esult<Self, Self
1ed0: 3a 3a 45 72 72 6f 72 3e 3b 0a 7d 0a 0a 2f 2f 2f ::Error>;.}..///
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 2f 2f /////////////.//
1f30: 20 47 45 4e 45 52 49 43 20 49 4d 50 4c 53 0a 2f GENERIC IMPLS./
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a ///////////////.
1f90: 0a 2f 2f 20 41 73 20 6c 69 66 74 73 20 6f 76 65 .// As lifts ove
1fa0: 72 20 26 0a 23 5b 73 74 61 62 6c 65 28 66 65 61 r &.#[stable(fea
1fb0: 74 75 72 65 20 3d 20 22 72 75 73 74 31 22 2c 20 ture = "rust1",
1fc0: 73 69 6e 63 65 20 3d 20 22 31 2e 30 2e 30 22 29 since = "1.0.0")
1fd0: 5d 0a 69 6d 70 6c 3c 27 61 2c 20 54 3a 20 3f 53 ].impl<'a, T: ?S
1fe0: 69 7a 65 64 2c 20 55 3a 20 3f 53 69 7a 65 64 3e ized, U: ?Sized>
1ff0: 20 41 73 52 65 66 3c 55 3e 20 66 6f 72 20 26 27 AsRef<U> for &'
2000: 61 20 54 20 77 68 65 72 65 20 54 3a 20 41 73 52 a T where T: AsR
2010: 65 66 3c 55 3e 20 7b 0a 20 20 20 20 66 6e 20 61 ef<U> {. fn a
2020: 73 5f 72 65 66 28 26 73 65 6c 66 29 20 2d 3e 20 s_ref(&self) ->
2030: 26 55 20 7b 0a 20 20 20 20 20 20 20 20 3c 54 20 &U {. <T
2040: 61 73 20 41 73 52 65 66 3c 55 3e 3e 3a 3a 61 73 as AsRef<U>>::as
2050: 5f 72 65 66 28 2a 73 65 6c 66 29 0a 20 20 20 20 _ref(*self).
2060: 7d 0a 7d 0a 0a 2f 2f 20 41 73 20 6c 69 66 74 73 }.}..// As lifts
2070: 20 6f 76 65 72 20 26 6d 75 74 0a 23 5b 73 74 61 over &mut.#[sta
2080: 62 6c 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 ble(feature = "r
2090: 75 73 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 ust1", since = "
20a0: 31 2e 30 2e 30 22 29 5d 0a 69 6d 70 6c 3c 27 61 1.0.0")].impl<'a
20b0: 2c 20 54 3a 20 3f 53 69 7a 65 64 2c 20 55 3a 20 , T: ?Sized, U:
20c0: 3f 53 69 7a 65 64 3e 20 41 73 52 65 66 3c 55 3e ?Sized> AsRef<U>
20d0: 20 66 6f 72 20 26 27 61 20 6d 75 74 20 54 20 77 for &'a mut T w
20e0: 68 65 72 65 20 54 3a 20 41 73 52 65 66 3c 55 3e here T: AsRef<U>
20f0: 20 7b 0a 20 20 20 20 66 6e 20 61 73 5f 72 65 66 {. fn as_ref
2100: 28 26 73 65 6c 66 29 20 2d 3e 20 26 55 20 7b 0a (&self) -> &U {.
2110: 20 20 20 20 20 20 20 20 3c 54 20 61 73 20 41 73 <T as As
2120: 52 65 66 3c 55 3e 3e 3a 3a 61 73 5f 72 65 66 28 Ref<U>>::as_ref(
2130: 2a 73 65 6c 66 29 0a 20 20 20 20 7d 0a 7d 0a 0a *self). }.}..
2140: 2f 2f 20 46 49 58 4d 45 20 28 23 32 33 34 34 32 // FIXME (#23442
2150: 29 3a 20 72 65 70 6c 61 63 65 20 74 68 65 20 61 ): replace the a
2160: 62 6f 76 65 20 69 6d 70 6c 73 20 66 6f 72 20 26 bove impls for &
2170: 2f 26 6d 75 74 20 77 69 74 68 20 74 68 65 20 66 /&mut with the f
2180: 6f 6c 6c 6f 77 69 6e 67 20 6d 6f 72 65 20 67 65 ollowing more ge
2190: 6e 65 72 61 6c 20 6f 6e 65 3a 0a 2f 2f 20 2f 2f neral one:.// //
21a0: 20 41 73 20 6c 69 66 74 73 20 6f 76 65 72 20 44 As lifts over D
21b0: 65 72 65 66 0a 2f 2f 20 69 6d 70 6c 3c 44 3a 20 eref.// impl<D:
21c0: 3f 53 69 7a 65 64 20 2b 20 44 65 72 65 66 2c 20 ?Sized + Deref,
21d0: 55 3a 20 3f 53 69 7a 65 64 3e 20 41 73 52 65 66 U: ?Sized> AsRef
21e0: 3c 55 3e 20 66 6f 72 20 44 20 77 68 65 72 65 20 <U> for D where
21f0: 44 3a 3a 54 61 72 67 65 74 3a 20 41 73 52 65 66 D::Target: AsRef
2200: 3c 55 3e 20 7b 0a 2f 2f 20 20 20 20 20 66 6e 20 <U> {.// fn
2210: 61 73 5f 72 65 66 28 26 73 65 6c 66 29 20 2d 3e as_ref(&self) ->
2220: 20 26 55 20 7b 0a 2f 2f 20 20 20 20 20 20 20 20 &U {.//
2230: 20 73 65 6c 66 2e 64 65 72 65 66 28 29 2e 61 73 self.deref().as
2240: 5f 72 65 66 28 29 0a 2f 2f 20 20 20 20 20 7d 0a _ref().// }.
2250: 2f 2f 20 7d 0a 0a 2f 2f 20 41 73 4d 75 74 20 6c // }..// AsMut l
2260: 69 66 74 73 20 6f 76 65 72 20 26 6d 75 74 0a 23 ifts over &mut.#
2270: 5b 73 74 61 62 6c 65 28 66 65 61 74 75 72 65 20 [stable(feature
2280: 3d 20 22 72 75 73 74 31 22 2c 20 73 69 6e 63 65 = "rust1", since
2290: 20 3d 20 22 31 2e 30 2e 30 22 29 5d 0a 69 6d 70 = "1.0.0")].imp
22a0: 6c 3c 27 61 2c 20 54 3a 20 3f 53 69 7a 65 64 2c l<'a, T: ?Sized,
22b0: 20 55 3a 20 3f 53 69 7a 65 64 3e 20 41 73 4d 75 U: ?Sized> AsMu
22c0: 74 3c 55 3e 20 66 6f 72 20 26 27 61 20 6d 75 74 t<U> for &'a mut
22d0: 20 54 20 77 68 65 72 65 20 54 3a 20 41 73 4d 75 T where T: AsMu
22e0: 74 3c 55 3e 20 7b 0a 20 20 20 20 66 6e 20 61 73 t<U> {. fn as
22f0: 5f 6d 75 74 28 26 6d 75 74 20 73 65 6c 66 29 20 _mut(&mut self)
2300: 2d 3e 20 26 6d 75 74 20 55 20 7b 0a 20 20 20 20 -> &mut U {.
2310: 20 20 20 20 28 2a 73 65 6c 66 29 2e 61 73 5f 6d (*self).as_m
2320: 75 74 28 29 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2f ut(). }.}..//
2330: 20 46 49 58 4d 45 20 28 23 32 33 34 34 32 29 3a FIXME (#23442):
2340: 20 72 65 70 6c 61 63 65 20 74 68 65 20 61 62 6f replace the abo
2350: 76 65 20 69 6d 70 6c 20 66 6f 72 20 26 6d 75 74 ve impl for &mut
2360: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 with the follow
2370: 69 6e 67 20 6d 6f 72 65 20 67 65 6e 65 72 61 6c ing more general
2380: 20 6f 6e 65 3a 0a 2f 2f 20 2f 2f 20 41 73 4d 75 one:.// // AsMu
2390: 74 20 6c 69 66 74 73 20 6f 76 65 72 20 44 65 72 t lifts over Der
23a0: 65 66 4d 75 74 0a 2f 2f 20 69 6d 70 6c 3c 44 3a efMut.// impl<D:
23b0: 20 3f 53 69 7a 65 64 20 2b 20 44 65 72 65 66 2c ?Sized + Deref,
23c0: 20 55 3a 20 3f 53 69 7a 65 64 3e 20 41 73 4d 75 U: ?Sized> AsMu
23d0: 74 3c 55 3e 20 66 6f 72 20 44 20 77 68 65 72 65 t<U> for D where
23e0: 20 44 3a 3a 54 61 72 67 65 74 3a 20 41 73 4d 75 D::Target: AsMu
23f0: 74 3c 55 3e 20 7b 0a 2f 2f 20 20 20 20 20 66 6e t<U> {.// fn
2400: 20 61 73 5f 6d 75 74 28 26 6d 75 74 20 73 65 6c as_mut(&mut sel
2410: 66 29 20 2d 3e 20 26 6d 75 74 20 55 20 7b 0a 2f f) -> &mut U {./
2420: 2f 20 20 20 20 20 20 20 20 20 73 65 6c 66 2e 64 / self.d
2430: 65 72 65 66 5f 6d 75 74 28 29 2e 61 73 5f 6d 75 eref_mut().as_mu
2440: 74 28 29 0a 2f 2f 20 20 20 20 20 7d 0a 2f 2f 20 t().// }.//
2450: 7d 0a 0a 2f 2f 20 46 72 6f 6d 20 69 6d 70 6c 69 }..// From impli
2460: 65 73 20 49 6e 74 6f 0a 23 5b 73 74 61 62 6c 65 es Into.#[stable
2470: 28 66 65 61 74 75 72 65 20 3d 20 22 72 75 73 74 (feature = "rust
2480: 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 31 2e 30 1", since = "1.0
2490: 2e 30 22 29 5d 0a 69 6d 70 6c 3c 54 2c 20 55 3e .0")].impl<T, U>
24a0: 20 49 6e 74 6f 3c 55 3e 20 66 6f 72 20 54 20 77 Into<U> for T w
24b0: 68 65 72 65 20 55 3a 20 46 72 6f 6d 3c 54 3e 20 here U: From<T>
24c0: 7b 0a 20 20 20 20 66 6e 20 69 6e 74 6f 28 73 65 {. fn into(se
24d0: 6c 66 29 20 2d 3e 20 55 20 7b 0a 20 20 20 20 20 lf) -> U {.
24e0: 20 20 20 55 3a 3a 66 72 6f 6d 28 73 65 6c 66 29 U::from(self)
24f0: 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2f 20 46 72 6f . }.}..// Fro
2500: 6d 20 28 61 6e 64 20 74 68 75 73 20 49 6e 74 6f m (and thus Into
2510: 29 20 69 73 20 72 65 66 6c 65 78 69 76 65 0a 23 ) is reflexive.#
2520: 5b 73 74 61 62 6c 65 28 66 65 61 74 75 72 65 20 [stable(feature
2530: 3d 20 22 72 75 73 74 31 22 2c 20 73 69 6e 63 65 = "rust1", since
2540: 20 3d 20 22 31 2e 30 2e 30 22 29 5d 0a 69 6d 70 = "1.0.0")].imp
2550: 6c 3c 54 3e 20 46 72 6f 6d 3c 54 3e 20 66 6f 72 l<T> From<T> for
2560: 20 54 20 7b 0a 20 20 20 20 66 6e 20 66 72 6f 6d T {. fn from
2570: 28 74 3a 20 54 29 20 2d 3e 20 54 20 7b 20 74 20 (t: T) -> T { t
2580: 7d 0a 7d 0a 0a 0a 2f 2f 20 54 72 79 46 72 6f 6d }.}...// TryFrom
2590: 20 69 6d 70 6c 69 65 73 20 54 72 79 49 6e 74 6f implies TryInto
25a0: 0a 23 5b 75 6e 73 74 61 62 6c 65 28 66 65 61 74 .#[unstable(feat
25b0: 75 72 65 20 3d 20 22 74 72 79 5f 66 72 6f 6d 22 ure = "try_from"
25c0: 2c 20 69 73 73 75 65 20 3d 20 22 33 33 34 31 37 , issue = "33417
25d0: 22 29 5d 0a 69 6d 70 6c 3c 54 2c 20 55 3e 20 54 ")].impl<T, U> T
25e0: 72 79 49 6e 74 6f 3c 55 3e 20 66 6f 72 20 54 20 ryInto<U> for T
25f0: 77 68 65 72 65 20 55 3a 20 54 72 79 46 72 6f 6d where U: TryFrom
2600: 3c 54 3e 20 7b 0a 20 20 20 20 74 79 70 65 20 45 <T> {. type E
2610: 72 72 6f 72 20 3d 20 55 3a 3a 45 72 72 6f 72 3b rror = U::Error;
2620: 0a 0a 20 20 20 20 66 6e 20 74 72 79 5f 69 6e 74 .. fn try_int
2630: 6f 28 73 65 6c 66 29 20 2d 3e 20 52 65 73 75 6c o(self) -> Resul
2640: 74 3c 55 2c 20 55 3a 3a 45 72 72 6f 72 3e 20 7b t<U, U::Error> {
2650: 0a 20 20 20 20 20 20 20 20 55 3a 3a 74 72 79 5f . U::try_
2660: 66 72 6f 6d 28 73 65 6c 66 29 0a 20 20 20 20 7d from(self). }
2670: 0a 7d 0a 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f .}..////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26c0: 2f 2f 2f 2f 0a 2f 2f 20 43 4f 4e 43 52 45 54 45 ////.// CONCRETE
26d0: 20 49 4d 50 4c 53 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f IMPLS./////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2720: 2f 2f 2f 2f 2f 2f 2f 0a 0a 23 5b 73 74 61 62 6c ///////..#[stabl
2730: 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 75 73 e(feature = "rus
2740: 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 31 2e t1", since = "1.
2750: 30 2e 30 22 29 5d 0a 69 6d 70 6c 3c 54 3e 20 41 0.0")].impl<T> A
2760: 73 52 65 66 3c 5b 54 5d 3e 20 66 6f 72 20 5b 54 sRef<[T]> for [T
2770: 5d 20 7b 0a 20 20 20 20 66 6e 20 61 73 5f 72 65 ] {. fn as_re
2780: 66 28 26 73 65 6c 66 29 20 2d 3e 20 26 5b 54 5d f(&self) -> &[T]
2790: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 66 0a {. self.
27a0: 20 20 20 20 7d 0a 7d 0a 0a 23 5b 73 74 61 62 6c }.}..#[stabl
27b0: 65 28 66 65 61 74 75 72 65 20 3d 20 22 72 75 73 e(feature = "rus
27c0: 74 31 22 2c 20 73 69 6e 63 65 20 3d 20 22 31 2e t1", since = "1.
27d0: 30 2e 30 22 29 5d 0a 69 6d 70 6c 3c 54 3e 20 41 0.0")].impl<T> A
27e0: 73 4d 75 74 3c 5b 54 5d 3e 20 66 6f 72 20 5b 54 sMut<[T]> for [T
27f0: 5d 20 7b 0a 20 20 20 20 66 6e 20 61 73 5f 6d 75 ] {. fn as_mu
2800: 74 28 26 6d 75 74 20 73 65 6c 66 29 20 2d 3e 20 t(&mut self) ->
2810: 26 6d 75 74 20 5b 54 5d 20 7b 0a 20 20 20 20 20 &mut [T] {.
2820: 20 20 20 73 65 6c 66 0a 20 20 20 20 7d 0a 7d 0a self. }.}.
2830: 0a 23 5b 73 74 61 62 6c 65 28 66 65 61 74 75 72 .#[stable(featur
2840: 65 20 3d 20 22 72 75 73 74 31 22 2c 20 73 69 6e e = "rust1", sin
2850: 63 65 20 3d 20 22 31 2e 30 2e 30 22 29 5d 0a 69 ce = "1.0.0")].i
2860: 6d 70 6c 20 41 73 52 65 66 3c 73 74 72 3e 20 66 mpl AsRef<str> f
2870: 6f 72 20 73 74 72 20 7b 0a 20 20 20 20 23 5b 69 or str {. #[i
2880: 6e 6c 69 6e 65 5d 0a 20 20 20 20 66 6e 20 61 73 nline]. fn as
2890: 5f 72 65 66 28 26 73 65 6c 66 29 20 2d 3e 20 26 _ref(&self) -> &
28a0: 73 74 72 20 7b 0a 20 20 20 20 20 20 20 20 73 65 str {. se
28b0: 6c 66 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2f 20 46 lf. }.}..// F
28c0: 72 6f 6d 53 74 72 20 69 6d 70 6c 69 65 73 20 54 romStr implies T
28d0: 72 79 46 72 6f 6d 3c 26 73 74 72 3e 0a 23 5b 75 ryFrom<&str>.#[u
28e0: 6e 73 74 61 62 6c 65 28 66 65 61 74 75 72 65 20 nstable(feature
28f0: 3d 20 22 74 72 79 5f 66 72 6f 6d 22 2c 20 69 73 = "try_from", is
2900: 73 75 65 20 3d 20 22 33 33 34 31 37 22 29 5d 0a sue = "33417")].
2910: 69 6d 70 6c 3c 27 61 2c 20 54 3e 20 54 72 79 46 impl<'a, T> TryF
2920: 72 6f 6d 3c 26 27 61 20 73 74 72 3e 20 66 6f 72 rom<&'a str> for
2930: 20 54 20 77 68 65 72 65 20 54 3a 20 46 72 6f 6d T where T: From
2940: 53 74 72 20 7b 0a 20 20 20 20 74 79 70 65 20 45 Str {. type E
2950: 72 72 6f 72 20 3d 20 3c 54 20 61 73 20 46 72 6f rror = <T as Fro
2960: 6d 53 74 72 3e 3a 3a 45 72 72 3b 0a 0a 20 20 20 mStr>::Err;..
2970: 20 66 6e 20 74 72 79 5f 66 72 6f 6d 28 73 3a 20 fn try_from(s:
2980: 26 27 61 20 73 74 72 29 20 2d 3e 20 52 65 73 75 &'a str) -> Resu
2990: 6c 74 3c 54 2c 20 53 65 6c 66 3a 3a 45 72 72 6f lt<T, Self::Erro
29a0: 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 46 72 6f r> {. Fro
29b0: 6d 53 74 72 3a 3a 66 72 6f 6d 5f 73 74 72 28 73 mStr::from_str(s
29c0: 29 0a 20 20 20 20 7d 0a 7d 0a ). }.}.