Hex Artifact Content
Not logged in

Artifact c301ca401c48ca965d198f5d30bdc29427e8497e:


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                    ).    }.}.