rust#rustc 1.72.0 (5680fa18f 2023-08-23)ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5U pin_project__pin_project_expand__pin_project_constant__pin_project_reconstruct__pin_project_make_proj_ty__pin_project_make_proj_ty_body"__pin_project_make_proj_replace_ty'__pin_project_make_proj_replace_ty_body%__pin_project_make_proj_replace_block%__pin_project_struct_make_proj_method-__pin_project_struct_make_proj_replace_method#__pin_project_enum_make_proj_method+__pin_project_enum_make_proj_replace_method__pin_project_make_unpin_impl__pin_project_make_drop_impl__pin_project_make_unpin_bound$__pin_project_make_unsafe_field_proj%__pin_project_make_replace_field_proj-__pin_project_make_unsafe_drop_in_place_guard!__pin_project_make_proj_field_mut!__pin_project_make_proj_field_ref%__pin_project_make_proj_field_replace__pin_project_internal__pin_project_parse_generics __private AlwaysUnpin% %% )UnsafeDropInPlaceGuard+ ++ //22UnsafeOverwriteGuard55 5value99<<47>7%%& (  voNno2++, .  cR},- 55 7 8 MSb 2+<5)%  + 1H Հ ŀŀH  ΃4āBׁ  ́ ́ ā   ̆0 5 ;|   ManuallyDrop  ק   | É ‰ ‰  ‰      0   0>ŇX ؇  ͇ 0      ‰  É ͇ Ň! % !&! ! PhantomData<ɏ !!! % !&! !!!, + ,,, ,,,, + ,,, ,,,D HZ " ' % % -#Ņ+$%-!!% A lightweight version of [pin-project] written with declarative macros. ## Usage Add this to your `Cargo.toml`: ```toml [dependencies] pin-project-lite = "0.2" ``` *Compiler support: requires rustc 1.37+* ## Examples [`pin_project!`] macro creates a projection type covering all the fields of struct. ```rust use std::pin::Pin; use pin_project_lite::pin_project; pin_project! { struct Struct { #[pin] pinned: T, unpinned: U, } } impl Struct { fn method(self: Pin<&mut Self>) { let this = self.project(); let _: Pin<&mut T> = this.pinned; // Pinned reference to the field let _: &mut U = this.unpinned; // Normal reference to the field } } ``` To use [`pin_project!`] on enums, you need to name the projection type returned from the method. ```rust use std::pin::Pin; use pin_project_lite::pin_project; pin_project! { #[project = EnumProj] enum Enum { Variant { #[pin] pinned: T, unpinned: U }, } } impl Enum { fn method(self: Pin<&mut Self>) { match self.project() { EnumProj::Variant { pinned, unpinned } => { let _: Pin<&mut T> = pinned; let _: &mut U = unpinned; } } } } ``` ## [pin-project] vs pin-project-lite Here are some similarities and differences compared to [pin-project]. ### Similar: Safety pin-project-lite guarantees safety in much the same way as [pin-project]. Both are completely safe unless you write other unsafe code. ### Different: Minimal design This library does not tackle as expansive of a range of use cases as [pin-project] does. If your use case is not already covered, please use [pin-project]. ### Different: No proc-macro related dependencies This is the **only** reason to use this crate. However, **if you already have proc-macro related dependencies in your crate's dependency graph, there is no benefit from using this crate.** (Note: There is almost no difference in the amount of code generated between [pin-project] and pin-project-lite.) ### Different: No useful error messages This macro does not handle any invalid input. So error messages are not to be useful in most cases. If you do need useful error messages, then upon error you can pass the same input to [pin-project] to receive a helpful description of the compile error. ### Different: No support for custom Unpin implementation pin-project supports this by [`UnsafeUnpin`][unsafe-unpin] and [`!Unpin`][not-unpin]. ### Different: No support for tuple structs and tuple variants pin-project supports this. [not-unpin]: https://docs.rs/pin-project/1/pin_project/attr.pin_project.html#unpin [pin-project]: https://github.com/taiki-e/pin-project [unsafe-unpin]: https://docs.rs/pin-project/1/pin_project/attr.pin_project.html#unsafeunpin        warnings rust_2018_idioms single_use_lifetimes    unused_variablesD HZ " ' % % -#Ņ+$%-!!%DJ A macro that creates a projection type covering all the fields of struct.MG This macro creates a projection type according to the following rules:JW - For the field that uses `#[pin]` attribute, makes the pinned reference to the field.ZC - For the other fields, makes the unpinned reference to the field.F@ And the following methods are implemented on the original type:C ```rust  # use std::pin::Pin; # type Projection<'a> = &'a ();## # type ProjectionRef<'a> = &'a (); & # trait Dox { 4 fn project(self: Pin<&mut Self>) -> Projection<'_>; 77 fn project_ref(self: Pin<&Self>) -> ProjectionRef<'_>; : # }! ```!!G By passing an attribute with the same name as the method to the macro,!JK you can name the projection type returned from the method. This allows you"N0 to use pattern matching on the projected types."3#=# % # use pin_project_lite::pin_project;#(=# pin_project! {# #[project = EnumProj]# enum Enum {$% Variant { #[pin] field: T },$( }$  }$$ impl Enum {$& fn method(self: Pin<&mut Self>) {$)4 let this: EnumProj<'_, T> = self.project();%7 match this {%- EnumProj::Variant { field } => {%0, let _: Pin<&mut T> = field;&/ }& }& C& C'?''[ By passing the `#[project_replace = MyProjReplace]` attribute you may create an additional'^` method which allows the contents of `Pin<&mut Self>` to be replaced while simultaneously moving'c# out all unpinned fields in `Self`.(&)=) =) # type MyProjReplace = ();)>)N fn project_replace(self: Pin<&mut Self>, replacement: Self) -> MyProjReplace;)Q?*?**R Also, note that the projection types returned by `project` and `project_ref` have*U5 an additional lifetime at the beginning of generics.+8+ ```text+ , let this: EnumProj<'_, T> = self.project();+/ ^^,?,,M The visibility of the projected types and projection methods is based on the,PM original type. However, if the visibility of the original type is `pub`, the-PK visibility of the projected types and the projection methods is downgraded-N to `pub(crate)`... # Safety. .T `pin_project!` macro guarantees safety in much the same way as [pin-project] crate..W= Both are completely safe unless you write other unsafe code./@/* See [pin-project] crate for more details./-0 # Examples00=0  use std::pin::Pin;00# use pin_project_lite::pin_project;0&1B1 struct Struct {1 #[pin]1 pinned: T,1 unpinned: U,1C1 C22 impl Struct {2C2)# let this = self.project();2&K let _: Pin<&mut T> = this.pinned; // Pinned reference to the field2NH let _: &mut U = this.unpinned; // Normal reference to the field3KC4 C4?44E To use `pin_project!` on enums, you need to name the projection type4H returned from the method.45=5 Q55Q5&5B5B6B6 Struct {6 #[pin]6 field: T,6 },6 Unit,7C7 C77C7C7) match self.project() {7", EnumProj::Struct { field } => {8/E8/E8! EnumProj::Unit => {}9$F9 C9 C9?99K If you want to call the `project()` method multiple times or later use the9NM original [`Pin`] type, it needs to use [`.as_mut()`][`Pin::as_mut`] to avoid:P consuming the [`Pin`].:;=; Q;;Q;&;B; struct Struct {;R< field: T,<C< C<< impl Struct {<6 fn call_project_twice(mut self: Pin<&mut Self>) {<9U // `project` consumes `self`, so reborrow the `Pin<&mut Self>` via `as_mut`.=X! self.as_mut().project();=$_>$C> C>?>> # `!Unpin`>>F If you want to ensure that [`Unpin`] is not implemented, use `#[pin]`>I) attribute for a [`PhantomPinned`] field.?,?=?  use std::marker::PhantomPinned;?#@Q@&@B@]@]@R #[pin] // <------ This `#[pin]` is required to make `Struct` to `!Unpin`.AU _pin: PhantomPinned,A CB CB?BBL Note that using [`PhantomPinned`] without `#[pin]` attribute has no effect.BOB/ [`PhantomPinned`]: core::marker::PhantomPinnedB2( [`Pin::as_mut`]: core::pin::Pin::as_mutC+ [`Pin`]: core::pin::PinC6 [pin-project]: https://github.com/taiki-e/pin-projectC9D D DD DEDDDDDD  DD  D DDDED DE E EEEEEEEEEEEEEEE  E EEH!HHHH HHH H HHHYHL IIIIII proj_mut_identII IIIIIIII proj_ref_identII IIIIIIII proj_replace_identII IIIJI proj_visIJ  JJJJJJJJJJ attrsJJ J JJ  JJ  JJ struct_ty_identJJ JJ JJ JJJJJJJ def_genericsJ J  J JJKJJKJ impl_genericsJ K  K KKKKKKK ty_genericsK K  K KKKKKK %KKKKK where_clauseK K  K KKKKKKKK body_dataK K  K KLLL LLLLL pinned_dropL L  L LLLLYL LL L LLNLM LLLLLLL nL LL  LL oLM MMMMMMM pM MMMMMMM qM MMMMMMM rM MMNMMM %MMMMM sM MMNNNNNN sN NN NN N NNQOOOOOO kOOOOO mOO oOO OOO O!PPPPPP qP PPPPPPP rP PPPPPP %PPPPP sP PPPQPPPP sP PQ QQ Q QQSQQQQQQ lQQQRQ mQQ oQR RRR R!RRRRRR qR RRRRRRR rR RRSRRS %RRRSR sR SSSSSSSS sS SS SS S" TTVTTTTTT lTTTTT mTT oTTU T%UUUUUU qU UUUUUUU rU UUUUUU %UUUUU sU UUUVUVVV sV VV VV V VVY VW VVVVVVV nV VV  VV oVW WWWWWWW kWWWWWWWW lWWWWWWWW lWWWWW mWXXXXXX pX XXXXXXX qX XXXXXXX rX XXXXXX %XXXXX sX XXXYYYYY sY YYYY YYYYY tY YYYY#YYYY YYY Y YZZZ^ ZZ ZZZZZZZ nZZ Z ZZ  ZZ  Z ZZ ZZ ZZ[ZZ[Z kZZ Z[[[[[[[ l[[ [[[[[[[[ l[[ [[[[[ m[[  [[[[[[[ p[ [  [ [[\\\\\ q\ \  \ \\\\\\\ r\ \  \ \\\\\\ %\\\\\ s\ \  \ \\\]\\]\\]\\]\ \\ ]]] field_vis] ]  ]] ]] ]]] field_ty]]  ]] ]]]]]]]]^ ]]]^] t] ^  ^ ^^^^օ^^^ ^^^ explicit_outlives_requirements^^^_ ___ 4_``a ``a `` unknown_clippy_lints`aaa aaa aa redundant_pub_crateaaab abb bb used_underscore_bindingb b bbbbbbυ7b bb b bbfbccccc kcc Projectionc ccc mc cc ccc c!dddddd qd ddddddd rd dddddd %ddddd sd dddedde eeeeeee eee e e eee ee ef ff f ffiffffff lff ProjectionReff ggg mg gg ggg g!gggggg qg gghgghg rg hhhhhh %hhhhh sh hhhihhi hhhhhhh hhi i i iii ii i iiiiji qi jjj jjjjjj rj jjjjj %jjjjj sj jjjuj jj k% kknkkkkkk kkk k kkk mkll projectl get_unchecked_mutl lllllll rl llnmmmmmmmmmm mmm m m mm mn nn n% nnqnonnon lno o ooo mooo project_refo get_refoopoopo rp ppqppqppppppp ppq q q qq qq qq q- rrurrrrrr lrrrrr mrss ProjectionReplacesssssss rs sstsstttttttt ttt t t tt tu uu u uuwuuu  uu uuvuuvv qv vvvvvvv rv vvvvvv %vvvvv sv vvvvw v vvv vv v wwwwwwwwww www ww wx xx x xxyxxx xxxxxxx qx xxyxxyx rx yyyyyy %yyyyy sy yyyyy yyyyy ty yy  unaligned_references safe_packed_borrows  σ __assert_not_repr_packed҃ q  this   r ؄ %DŽȄքɄ sʄ ׄلŅ      Ѕׅ݅ۊ   n           k Նӆ l͆ ΆԆ׆؆نچ lۆ  m   p    ̇ʇ q LJ  ȇ ˇ·χЇч r҇ ݇  އ  % s     ƈň variant_attrs   Ljو variantڈ    ʼn Ɖˉ ̉щӉ ԉ܉  ݉  Ԋ ŠҊÊ tĊ ϊ  Њ ӊՊ݊   4ьҌ ӌ، ٌߌ    ˟   ΍ӍԍՍ֍ q׍   r  % s Ǝ؎ َގ #  kŏϏƏ mǏ    r ڐې ŒĒ͑Α֑ϑБՑё ґב  ƒ   # Ǔɓėߓ l m  ӔԔՔ֔ rה  ޖ  ߖ  ֗ חܗ ޗ+  lϘ٘И mј r Λϙ Йؙٙڙ Ӛ Ԛ     ןœ   Ԝ՜֜ל q؜  r  % s ǟ ɝ˝̝͝   ϞО؞ўҞמӞ Ԟٞ۞ ܞ ȟ ɟ    ʠȠ q ɠ̠ݠ͠Π۠Ϡ rР ܠߠ % s   t آ&Ţ ʢ ʢ ȢХ  n         ɣޣʣˣܣ̣ pͣ ٣  ڣ ݣ q     r     % s    ʥͤΤ            ҥեߥ n      p Ǧ %Ŧ s ƦȦҦ      Ч§çϧħ nŧʧ ˧ ѧӧ  ԧק  ا  ܧ   p     q    ¨ r    ĨŨƨ %ǨͨΨߨϨ sШ ܨ  ݨ        ©ȩɩʩԪ        ժ ֪ت٪۪ڪܪ  n     ū ƫ̫ͫ۫Ϋ pϫ ܫ % s ʬɬ  ˬݬ ެԭӭ   խ '   ®ʾȮٮɮʮ̮ͮ׮ή ϮԮ  ծ خۮޮ߮ proj_ty_ident   default_ident  Ư  m     Яѯۯү ӯد  ٯ ܯ۲     m     İŰ __pin_project_make_proj_fieldư  q     r     % s    ʱղرٱò           IJ ŲDzȲʲɲ˲ݲ     ֳ m ɳг ѳ q  r  % s ȴɴ ߴ      ݵ      ߶  mɶ  ʶ  ζӶ Զٶ ڶ   q    ķ· r    ÷ƷǷȷ %ɷϷзѷ sҷ ޷  ߷       ø ĸʸ˸̸ֹ        ׹ عڹ۹ݹܹ޹ Ǿ   κк޺ߺ   m    q Żû r ĻǻȻɻ %ʻлѻ߻һ sӻ   ޼ ߼       Ⱦ,ϾϾҾپ Ӿ;޾ ޾ ܾ   ȿ ɿ mʿҿ  ӿ׿ oؿ    q     r     % s     s    )     4      mut_mut      ref_option_ref   type_repetition_in_bounds m o  !'__pin q  %  r ! s  s /    !"         m      q     r     % s                  '    m  q  r  % s               m       q     r     % s                       '    m   q  r  % s           4#   $'    m   o  q     r     % s     s         4          m o   q  % s  s 2&   '% proj_path                       %      -             2)   *%         _ignored_default_arg  m    method_ident   get_method     r          %    m   څ   r       m       څ     r                m    !       !    ! r  #      څ       $    :,   --        m   _proj_ty_ident  r                m   project_replace          replacement     r  #(  __self_ptr        __guard          ƣ            %      0/   0#        m       څ     r              m    !       !    ! r  #   څ ǀȀʀ  ρ΁  ЁҁՁ˄    ׂ ؂݂߂  $  ƒ à  82   3Ņ+ǒ    ؈   ̆ mȆ  Ɇֆ׆؆ن rچ    ҈ƈ  ׇ؇هڇۇ ܇߇    Lj Ȉڈ݈Ē  m            ʼnɉʉ ƣ؉     r  #  Ŋ ϊ ъ Ҋ ֊ۊ ݊   ЦČƌ nǰ  Ό ׌  ٌ    ƣ       ˍ̍    ގ ߎ % ʏ   ÏÑ‘ȐǐÐ Đɐ  đ Œ*̒̒5ϒ֒ Вʒے ے 6ْ      ēړœƓؓǓ qȓ Փ  ֓ ٓܓݓޓߓ r     % s        ;  non_snake_case    __Origin!Ɵȟɟ؟ʟ q˟ ٟڟ % s  __dummy_lifetime    Š Ǡ Ҡ Ӡ!Ԡ۠ܠݠޠ   ! q      Unpin ġȡ ɡϡСѡޡҡ rӡ ߡ % ! r      ƢǢۢȢʢˢ٢̢ s͢ ڢܢ)8   9ţˣգ֣ _identףݣ ޣ _impl_generics    _ty_generics     % _where_clause     Ǥ̤ͤ Τܤݤߤ   lifetime_bound  ݦ  generics ʥ˥̥Υ generics_boundϥݥ ޥ generics_unsized_bound Φ generics_lifetime_boundŦ ƦϦަ ߦ PinnedDrop  self_ty   %  where_clause_ty  ˧̧ͧϧ where_clause_boundЧ  where_clause_unsized_bound ۨ where_clause_lifetime_boundҨ Өܨ      arg      ϩЩשѩ  ҩԩ  թ ة׾     ͪΪ Ъ Ѫ  ۫ë īܫ      Drop   %  ߬  ܭ ݭ Ѿ      Ǿ   __drop_inner  ȴ Ĵ ŴǴ ɴߴ   ε ϵ  ʶ˶ж̶ Ͷ ѶҶԶ նڶ  ܶ      %    ҸӸԸָ ׸     ҺӺ׺Ժ  պ غ  pinned_self          #  ü  ż μ мӼ ռ     Ƈ ؾ޾ҿ   q     r    ̿ʿ %ȿ s ſ  ƿ ɿ˿Կ׿'   MustNotImplDrop   drop_bounds              q     r  % s +;   <                 1>   ?$               2A   B%                  read :D   E-              .G   H!           !      !  .J   K!           !     ! 2M   N%                #P   Q  l  l  n     k          k l l n      k  l  n      l          k l l n      k  l  n     l          k l l n      k  l  l  n                k l l n       k  l  l  n     o            k l l n   o       k  l  l  n        o            k l l n    o      )S   T k  l  l  n        o    proj_ty_vis                 generics_default    %            s      t         k l l    n    o                         %       s   t V  %&+,5     !"# $ ee   !m  '' voNno2&( !  %% & %%(** , -- cR},-,. , ++ , ++)00 1&  // 1 ŀ233 4āǁ?7 ?7 2́2 4 с"ЄЄӄڄ Ԅ΄66  MSb785555Ʌ::΅ ;΅΅3  99 ;   (== >Ňȇ@7 @7 <͇< > ͇҇́/9core::marker::PhantomPinnedcore::pin::Pin::as_mut&https://github.com/taiki-e/pin-project core::pinAcore::pin::Pin?https://docs.rs/pin-project/1/pin_project/attr.pin_project.html››99889y;X yq|y;X>AXy;X.|Twey;XkMYy;XY`a/ry;X܍qy;Xʆ=y;XRJDy;Xwy;X!|ud=y;XSy;XF $e]jy;X?Lѕy;X-y;X1B"Qy;XwEN'!8y;Xl܅R-#y;XfE.SmLy;X4Iy;X kCTJqy;XbV:ity;X"V]?ܵy;XCצ<7y;XCNy;X LA$T!y;Xnb'Wy;X8TA 6Оy;X4%? y;X6S:y;X2䶀Oy;X/y;Xwvҥmm y;X7!y;XɃmΓy;X`UGjy;X5|R{y;X~ WlMmMqF 4GzXϺ. ! 5|QT3#FrGOHnHHIIIgJJJKKK.LLMlFGH"IIJKLL%%%%%%%%%%%%%%%%%%%%%%%%!  !      3J5&Hzu~6dy  a 4kFGHVHHHII7JJGKKKLM 4G{zQȺ|'   .uJM3FGGG%G3GAGOG]GkGG0HHHgHHH,IhIIIII`JJJJKKKKL'LLLLZMcM3D5 Hznw/z]r~  Z4dF GG#G,G:GHGVGdGGG7HOHpHHH3IoIIII"JiJJJ@KKKKKLnLLLMaMjMG%HEHaHHHI]I}IIIIKJJJJ]KKKKK$LLLLFMGH>HXHrHHHTIvIIIIBJkJJJIKKKKKLLLL6MG)HeHH IaIIIOJJJrKKK LLLJMGHHJI8JJHKLMGH#IKI9JJLMH:I)JJuL MGHHIIJK&LLF = E D <  E VJJLQMj j bFGnHHIgJ>KKLGIKG ItK$De:n6a=Z} !(/JQXdhovzGIK3K5'Hzv7ez  b4nMNy;X'R$ktttttuODHT Ay;Xl܅R-#,y;XCG^gy;Xw$y;XS&y;X7!<y;Xf_$yy;X̨o&y;X LA$T!4y;XwEN'!8+y;Xnb'W5y;X1B"Q*y;Xv*U y;Xwvҥmm ;y;X8TA 6О6y;Xl7: y;XCצ<72y;Xڮn1y;Xz@a y;X>AXy;X/:y;X5|R{?y;Xy;X4%? 7y;XRJDy;X4I.y;Xpg( y;XfE.SmL-y;X.|Twey;X*Y,XUEy;XCxU;y;X kCTJq/y;X"V]?ܵ1y;X,~e߉Py;X?Lѕ(y;X~ W@y;X2䶀O9y;XF $e]j'y;XY`a/ry;Xa G y;XbV:it0y;XxEaj y;XĞꟹ!y;XɃmΓ=y;XVsy;X`UGj>y;XFS@ϰy;XCN3y;X yq|y;X!|ud=%3==$nu\D8L]o'9;lf]B H ) L#&#KHG#3&8-* %FJ=EH2IMLM(KIH":V?S6\  @+B  # "!+*"&(NK[GD $'8;KO4 )) *810 _d' RV9 0QQO XA. ' *'OL I ' *#00% OQ ' :Y%% J- $'V! P3,:* ?47:6) $$$(JW  % -95= ."00R ."00R 6&)4R *9R5=& &:`W ": % cYHF/g221*4V$524*4V$5@$A5 4'(.A8 *'(.I. ('(.5VE.4V*_H]MVW)TYGPVE>A`$* 8`W +#*3 % YHF/2@$?* 4')#0+$ ?* *')#0+$ G. ')#0+$ 5V"E64V*=1 ):7? ": - - 87? +#*3 + &* *4, ,/W ": 3&RP. */W +#*3 3$R!M6 / \OKTSPE LC D!: J aJ$ ,ZK+48'#/8< 6 3&//1 *33 !a]_Va[Y$;!.77E(2;;c)I%CNWM+ W 9 )CBXXRS!3BP .2465'-=? 18 1452& $(+ *"& $ (/ *"& "$$ 7 *""" j$$$( *""&&  $$(0 0""&5 $$(5 0""&0 ,$$(H K+48+ #/8<  % (""&67*33,7*336)*33& !& A70E:01 9RK, P$) &>= /PPB NP䦇fĥx86_64-unknown-linux-gnu§m3&pin_project_lite-280531a4fb67617fy;X <<AA=?=??????p?p]#