! / 0 0 0 0 8 ` // 74 ` sync_wrapper-79e8e6a4027930f7.sync_wrapper.a79c84cf0076d9a4-cgu.0.rcgu.o/ lib.rmeta/ 0 0 0 644 24032 ` ELF>`\@@GNUÀrust Z#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ futures_coreÁ.úúõÀü.¢ Å£¼…Z-b2e86d4a91990c16Á«ª1Úë• ¢›ºXÝÓrŽ*-1ad4f876c768bda9Á±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5Á‰m6GÞ­n6ÇèÆ2-64f5f36fb0927694Á»ÄóG Øg{ë(3íi«F×-06449a08aaab5e30Árustc_std_workspace_coreÁ€û{ù`ä"Ei¥€ÞÏ%G-cb0d4d77988d81b5Áó"Æ)ΉÉðÛÕpEÍ—E-3ec41d3a5a80a4a4Á miniz_oxideÁÐ8°ø‚ðbž Lƨ°J-e44eaef1807e5fc0Áadler2Á9lí©yA6P/D$UBŸ-dca52f01a59c33e7Á hashbrownÁ™¸ÈXó®÷ …ùý{e-143c77bb957d9940Árustc_std_workspace_allocÁð…¨À �¶÷Üúò·_z%í-145a318e0772276cÁ std_detectÁK(ƒ0ì*ãÛ8²D?-f99feda5ce9e492aÁrustc_demangleÁµ%jŽeårVŠÕÓ•-cfd0ab54bb33760eÁcfg_ifÁÍ}λ—©ŒÕž§C•×o-360da4ba13154744Á addr2lineÁ‹c²ŽúY\ÈGÞö÷ö--09755979c57b7e64ÁgimliÁ¢±QÄÍ`ª§DÞåù¬y-9a1fede77fbbf2f0ÁobjectÁö‚F λâËvú.zËí-7ff85ea729a864ffÁmemchrÁž˜]²1<õ¶=U�ý�Où-0e3477fb2664a277Á  ÿŽ—jl‹®¾To–K™G-549498e8b2e4d924Áû   SyncWrapperÁ  � ó�˜ get_mutÁ get_pin_mutÁ  into_innerÁ��ñ�> � ” SyncFutureÁ#‚#innerÁ&‚&˜ &Œ *‚*´*À - /�/ñ SyncStreamÁ2�2õ 5�5˜ 5Œ  9�9Ÿ9 poll_nextÁ<  >�>ñ88888-8-8-8181818<8<8<8@8@8@8ÿ   ²ó 0…íÓ%Gg-�Ÿg  ö  ¬  Í ¿´##Ý %õ О·V)Mé₟g##Ý %õ О·V)MéâÍ E22É 4õ “uråðî�Ÿg22É 4õ “uråðîÍ   /#>2  *#92ÿ (Ÿgö¬¿´E\Á  Í Òü”>  $²Í ,¥� -,Æz  Í  Ë€~  {Í yÍ \�Š«\ÇÍ Øü™? Í 4¶   L¨ 2üÓ&0´Ó& å\  Í Í     Í Uÿ$ê&þ”ð&`‹'üˆ&ƒîšîšPinÁðš¿ ð[$²òVá=µ•4¨\´&îšîšïðš¿ ð[$²òVá=µ•4´$›& ’ð\÷&Í ‚'î¨ö&þ´$ñ&thisÁ$4Ê-Í Ö-ü£-3Í ¾-  $µ- ,læ/  ¤à/â/ Ãg à/9”â/ú/ü¢/XÀœÜÄœ¯ÅœóƜǜ€Èœó‘¥_¿´Òw¥ĤĤŤErrorÁ Ñâó:½ÖàM\Ê/   ,©/ €g€gŠ‚gê ûcƒgbufÁûcØ«q¢1È¡ °/ÚB[œ  ðTdÙ0TÙ0 ÷Í ¼Ï0LÏ0 Í ?"ì0ü°0<  $À0Í uÓ…øe„½1L½1ø,Ç1Ó1"ü™1:  $®1Í ,¡1� -øl¼¡4„¡4 ¦,²4$ü“4' #¦À4(üì3Tü $„4¦,÷3  ²ó 0…íÓ%Gg-¦¢õ @aã¿Tì4Ƽì4T÷4 ¦-d÷4‰5)üÅ4D¦ à4ü $×4Æn3ÀvüÂ6-ŒÇ6 å\ü ¦.¦† ü  ¦Uÿ¥$Â6ÔÒ¬Ù6üÇ6(tû6$�7 Á´¦,û6†7D�7�7-üÙ5¶ü­6bÙ´Û´Ü´ËÝ´óÞ´ß´¸±Ýæó}rÑ÷À´¦”�6îšîšïðš¿ ð[$²òVá=µ•4 ü $á5 �…�…lŸ…wakerÁ‰… … local_wakerÁ‰…¡…extÁ‰…¢…_markerÁ‰…£…_marker2Á‰…8íœ}©÷5îšîšïðš¿ ð[$²òVá=µ•4 ¦,±6ÞcxÁWõ '¥Ä_®ú<Ý6ÆŒÝ6<å6 ¦/Lå6î6.jÕ"Ü6Ò‚! Ú6 Æy®§Ê#�dü7  Úœö7ø7ð ö72Œø7�81ü¸7W®\à7 ³,¿7À Æ7ÚœL𑼴;„´; �,Å;$ü¦;' 2�Ó;7üÿ:Tæ$—;�,Š;  ²ó 0…íÓ%Gg-�¢õ @aŒ&¿Tÿ;ï&¼ÿ;TŠ< �-dŠ<œ<8üØ;D� ó;æ$ê;ï&n3é'vü”>-Œ™> å\æ�=�† æ �Uÿ¥$”>0 û(¬«>ü™>(œÍ>LÓ> G�,Í>Ý>lÓ>æ><ü =Æüÿ=gÙ´Û´Ü´ËÝ´óÞ´ß´¸±Ýæó}rÑ÷řǙș­É™Ê™àË™óG*¤�R{9 F�ÄÜ=îšîšïðš¿ ð[$²òVá=µ•4 æ$­=Ž!Ã=îšîšïðš¿ ð[$²òVá=µ•4 �,ƒ>Qñ!Uõ %Yí(×)¬<¯>ï&Œ¯><·> �/L·>À>=²,®>û(1ì+ ¬> ï&y®Y¥-�dï?  Úœé?ë?ð é?2Œë?‚@@ü«?W®\Ó? �,²?À ¹?ÚœLð‘Ì…  Í (  3Í :A #2ûñ$Ôûcq,ÚŸgq¢gŠLá€gïöîšFutureÁ4‡¿´ l<š�… »$£Ù´ üд;üÐLI A mutual exclusion primitive that relies on static type information onlyÁ��ü¡‚ This library is inspired by [this discussion](https://internals.rust-lang.org/t/what-shall-sync-mean-across-an-await/12020/2).Áü¤C+https://developer.actyx.com/img/favicon.icoÁ„ï(https://developer.actyx.com/img/logo.svgÁl« #2û'ñ(ûcq'Ÿgq8¢gŠ'€gï&îš•0¿´ l�… »Ù´ ÇÊÍ$Â|ÂÈνÀŸ¢Dñ–tÿƒüÂUx{jm^ü®Læ0û�üÿa^ In some cases synchronization can be proven statically: whenever you hold an exclusive `&mut`Áüá ^[ reference, the Rust type system ensures that no other part of the program can hold anotherÁüÀ `] reference to the data. Therefore it is safe to access it even if the current thread obtainedÁü¡ c` this reference via a channel. Whenever this is the case, the overhead of allocating and lockingÁü… <9 a [`Mutex`] can be avoided by using this static version.Á �üÆ c` One example where this is often applicable is [`Future`], which requires an exclusive referenceÁüª _\ for its [`poll`] method: While a given `Future` implementation may not be safe to access byÁüŠ^[ multiple threads concurrently, the executor can only run the `Future` on one thread at anyÁüé_\ given time, making it [`Sync`] in practice as long as the implementation is `Send`. You canÁüÉ]Z therefore use the static mutex to prove that your data structure is `Sync` even though itÁì§ contains such a `Future`.ÁÅ�lÉ # ExampleÁ×�<Û ```Áüã" use sync_wrapper::SyncWrapper;Áä† use std::future::Future;Á£�¤§ struct MyThing {Áü¼EB future: SyncWrapper + Send>>,Á,‚ }Áˆ�”Œ impl MyThing {ÁüŸXU // all accesses to `self.future` now require an exclusive reference or ownershipÁ,ø‘@þ�ü‚  fn assert_sync() {}Á£�ì§ assert_sync::();Á<Ÿ>Í�üÑC@ [`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.htmlÁü•FC [`Future`]: https://doc.rust-lang.org/std/future/trait.Future.htmlÁüÜPM [`poll`]: https://doc.rust-lang.org/std/future/trait.Future.html#method.pollÁü­B? [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.htmlÁ\��þÆÍ œ  0…íÓ%Gg-Í   Bÿf PÍ   Bÿ  Í _a Ÿ  Í ´¤�‹F ©  ü”"üÁ:7 Creates a new static mutex containing the given value.Á€�tˆ # ExamplesÁ›�<£¸>ü¯"É>Ö�üÞ%" let mutex = SyncWrapper::new(42);Á<ˆ¸>¡Í   Bÿø�Öü™#üØ0- Acquires a reference to the protected value.Á��ü•_\ This is safe because it requires an exclusive reference to the mutex. Therefore this methodÁüù_\ neither panics nor does it return an error. This is in contrast to [`Mutex::get_mut`] whichÁüÝ]Z returns an error if another thread panicked while holding the lock. It is not recommendedÁü¿_\ to send an exclusive reference to a potentially damaged value to another thread for furtherÁ|£ processing.Á·�ü¿[X [`Mutex::get_mut`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mutÁŸ�t§±Gº�<¸>üÎ"É>õ�üý)& let mut mutex = SyncWrapper::new(42);Áü«  let value = mutex.get_mut();Á|Ð *value = 0;Áüä$! assert_eq!(*mutex.get_mut(), 0);Á<�¸>< A A   AÍ Bÿ ¨ Í $­üˆ&7üÞ74 Acquires a pinned reference to the protected value.Áš �ü¢ 63 See [`Self::get_mut`] for why this method is safe.ÁÝ �tå ±Gø �<€!¸>äŒ!ô>´­! use std::pin::Pin;ÁüÈ!# use std::task::{Context, Poll};Áð!�üø!&# use pin_project_lite::pin_project;Áü£""É>Ê"�”Ò" pin_project! {Áüé"! struct FutureWrapper {Á”�# #[pin]Áü¦#" inner: SyncWrapper,ÁLÍ# }Á,Û#‘@å#�üí#1. impl Future for FutureWrapper {Áü£$  type Output = F::Output;ÁÈ$�üÐ$SP fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll {Áü¨%74 self.project().inner.get_pin_mut().poll(cx)ÁLä%­T,ò%‘@<ü%¸>\�&Bîšîšïðš¿ ð[$²òVá=µ•4 B  îšîšïðš¿ ð[$²òVá=µ•4 BÍ Bÿ ¥& Í Ô 4ð&���þä£-ü‘'74 Consumes this mutex, returning the underlying data.ÁÍ'�üÕ'_\ This is safe because it requires ownership of the mutex, therefore this method will neitherÁü¹(YV panic nor does it return an error. This is in contrast to [`Mutex::into_inner`] whichÁü—)]‹Küù)_òK|Ý*ÚLñ*�üù*a^ [`Mutex::into_inner`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.into_innerÁß+�tç+±Gú+�<‚,¸>üŽ,"É>µ,�ü½,)­Nüë,'$ assert_eq!(mutex.into_inner(), 42);Á<—-¸>Tª-  Í Bÿ Í ¥ üÐ.&�‹F Ü.   üû. �‹F €/   gü¢/3¥/CDE C  D€g€gŠ‚gê ûcƒgáûcØ«q¢1È¡E®Bÿ ©/ Í $ª/œ üþ/+�‹F ƒ0öÍ <†0  ÷!¤°0<³0  Bÿ Í üð0"�!!‹F õ0  "®"Ì™1$œ1Í   Bÿ  "Í �( Ä�3ì×1 `Future` which is `Sync`.Áõ1�tù1±Gˆ2�<Œ2¸>ü”20- use sync_wrapper::{SyncWrapper, SyncFuture};ÁÅ2�ÔÉ2 let fut = async { 1 };Áüä2# let fut = SyncFuture::new(fut);Á<ˆ3¸>T›3‚$$þƦ ¦3ü О·V)Méâ%¬¯3,¯3##ÆôÇ3‚''¸e Í3¿´¦4Ð3ü ()äì3ó3¦ü Bÿ&& (¦õ À äÅ4TÌ4ü ¦Bÿ&& )¦ƒüŒ5)‚++¸e ’5§f4•5ü ,-À´Á´-!\¼54Á5**¿ üÙ5I$Ü5FGHîšîšïðš¿ ð[$²òVá=µ•4 Fü  G�…�…lŸ…¥ ‰… …¸ ‰…¡…Ñ ‰…¢…â ‰…£…÷ ‰…8íœ}©HÙ´Û´Ü´ËÝ´óÞ´ß´¸±Ýæó}rÑ÷À´ü Bÿ* ë5* -¦ñ!žÙ6-�.�.�..-Òü’7�00‹F —7³1 g1ü¸73»7IJK I³ J€g€gŠ‚gê ûcƒgáûcØ«q¢1È¡K®Bÿ/ ¿7/ 1Í $À7œ>Äù9ì“8 `Stream` which is `Sync`.Á±8�tµ8±GÄ8�<È8¸>üÐ8! use sync_wrapper::SyncStream;ÁÄò8 use futures::stream;Á‹9�ü�9# let st = stream::iter(vec![1]);Áü³9! let st = SyncStream::new(st);Á<Õ9¸>ÓfuturesÁœã9ÜÝ9T„:�33þÆ� �:æ“uråðî4¬˜:,˜:22ï&üÌ:,ÓÐnœ¶:ܰ:�66ÿo Ò:E�¤Õ:æ78äÿ:†;�æBÿ55 7�õ éäØ;Tß;æ�Bÿ55 8�¬ü»<�=�=�==<û(ü…?ÓÐnœï>Üé>�??‹F Š?�@ g@ü«?3®?OPQ O� P€g€gŠ‚gê ûcƒgáûcØ«q¢1È¡Q®Bÿ> ²?> @Í $³?œÞ0 Ó0 ø 0 ³/0 Â/0 (0 û50 ˆ60 0 É70 Ø70 ¥0 Ç=0 Ô=0 y0 ¼?0 Ë?0 &5'4https://doc.rust-lang.org/std/sync/struct.Mutex.htmlÁMutex::into_innerÁ¨6https://doc.rust-lang.org/std/future/trait.Future.htmlÁ4https://doc.rust-lang.org/std/marker/trait.Sync.htmlÁéMutex::get_mutÁ•0this discussionÁÀ Self::get_mutÁNhttps://internals.rust-lang.org/t/what-shall-sync-mean-across-an-await/12020/2Áãx¨œy·yòy°zé•0¿´ÌzÀ ÷zãxåzœy¨·yéÿ òy°z•0Ìz÷zÀ åzŸg¿´ŠP³¯ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯² SyncWrapper SyncFuture SyncStream º}Ì}Ý}¤ÙvÏ„œ§h§o­ÿ]à™t±{fîf$Ìw75kœíçKBÝôÉUcIHU_Ú‹eªóî@÷S]åøÏ'�î+*£(ðýl t^8sÁù©WwqÌvÈcÌÛçù7mkHDøˆÒ¸¸‘6 ¡áCÜ B&1-võý¶¬Wµ pI½Âô¢¹×'åX¿z¯7×ó¬9Ph×F‡QTg€•ŠË¦ {-¤¡=üi¡©¬ìîœê!£DQÊ…·m-!!…¸ÀÁ•?”˜‰Ú–ž¨!2õ�(cQLmúÆÜ] ì/¡ÿîd‰«QH dz0™W�Ì jÒM�.åí_ò¿£…›×´Ú¥5 .LäSU¼¾ì”Ò F^A¾«XS–×bûfŒ8î®–°åW·EêX‰7ëo(éä,lDAÅ>�‚Ó¼%aNÖÐHn8{dÿÞÆæTé¦^Ά…½èÈJ?2þ¯p*²0XñÊ6“2¨«ì qµŸyð W¸Dð§è äƒ`<[y¯8l]èæ#ËÀÌ=`pS+Ð6‚¾†¾™zå¾éŒà?-/Ç÷¦SÒTñÊÊðÃ0EV¨¾3£8é½ ‹Ä^f´^ð¼)ñ?Fß@¶ªü$Ð�:@ÛÍ#Œ<9JénI¡+;qÑmm³ñ\cò3øª§ÑÂaÜ!“?7òÂnUài‚ج½É’+”¦ärfoÐt9¶{.FÄ-°€VÖ·ª9|4MŸÌsù\:} ¼íÆ«©�9ˆ¦’"ë–eµîþ>•Kyd yô(vƒtÍm:§ë>—Êcµ,ðÍ0ªzl {6á�v¿Ë©Ož«–ו{`¥Dà~›Ê^<_<`<Î [z~‚…Œ’™ ¨«±·&##W #h$,(;,‚, />/z/%0o0§0â0" 1p2ˆ2Î23N3˜3°35O5‹55 6·7Ð7'8g8§899²:ú:I;ʳ"<#+/^/T0Ç0^2¸2u3o5¥78á8-;'              És"Õ"#B$é'˜+ã.’/‡0ú0 2t2æ2&3œ3È3£5g7»7?88909a;Uqwz~‚‰�•œ£¨®´¼"õ"##E#R#c$'(7,~,/,/9/h/u/ 0^0k0¢0Ñ0Þ01_2l2„2½2Ê2 3I3‡3”3«35J5y5†516¦7³7Ë78#8c8¢8ï8ü89®:õ:7;D;ï;õ;û;<<<<<#<)<0<7<= Õ N ¯"ÄwCØýŸR¢tÛû g Æ ? Ö O °#ÅxDÙþ Sì"X$\$ (1,/0¢013C3ö4#6\8œ8¡:á;Çm"# />/%0§02ˆ2N3O5a7ã7º8 ;©"V2�7œ"I2�7øû "&*.@DKRV]dr„ˆ™�¤¨¯¶ºÁÇËÒÙêñý!(/37>EV]dhov}�ˆ�Ÿ£§®µ»ÁÇÍÓÙßåëñ÷ý ¬"Y2 7@#A#B#C#_/U0È0º2»2w3}3p588ã8ç8.;aD#+/d/Z0Í0¼2ƒ3u58ë83;0 0 0 0 Ü ¤ÙvÏ„œ§«XÁò™W¢„ÿP°P´PØPÈPïP° ODHT R€·ÞFÄ-°€VÖES+Ð6‚¾†¾5QH dzfŒ8î®–°&§è äƒ`<2XS–×bû%oÐt9¶{.Dªzl {6áNU_Ú‹eª¨«ì qµŸ0íÆ«©�9ˆ¦H¨!2õ�(cQkœíçKBQTg€•ü$Ð�:@Û<�v¿Ë©OO’"ë–eµIåX¿z¯7×I½Âô¢¹×'îœê!£DQÊ¿£…›×!-/Ç÷¦SÒT7åøÏ'�î+‰7ëo(éä(=üi¡©¬ìnI¡+;qÑ>Êcµ,ðÍ0Mh§o­ÿ]à…·m-!!‹Ä^f´^ð¼:´Ú¥5 .L"·ª9|4MŸÌFåW·EêX'yð W¸Dð1Ûçù7mkH DøˆÒ¸¸‘6 ¨¾3£8é½ 9äSU¼¾ì#Ά…½èÈJ-#ËÀÌ=`p4Í#Œ<9Jé=…¸ÀÁ•?øª§ÑÂaÜ!@ñÊÊðÃ0EV8“?7òÂnUàA,lDAÅ>�‚)0XñÊ6“2/îþ>•KydJîf$Ìw750™W�Ì j¤ÙvÏ„œ§ý¶¬Wµ pi‚ج½ÉBž«–ו{`P”˜‰Ú–ž ¡áCÜ BLmúÆÜ] ì”Ò F^A¾«$)ñ?Fß@¶ª;mm³ñ\cò3?Ó¼%aNÖÐ*ÝôÉUcIHHn8{dÿÞÆ+ÒM�.åí_ò ’+”¦ärfCó¬9Ph×F‡æTé¦^,™zå¾éŒà?6Ím:§ë>—L[y¯8l]èæ3/¡ÿîd‰«?2þ¯p*².wqÌvÈcÌ óî@÷S]&1-võ^8sÁù©W yô(vƒtKŠË¦ {-¤¡™t±{f*£(ðýl t sù\:} ¼G¥Dà~›ÊQkÿ_X}ÿpÿOÿÿS(!Jm'ÿZÿÿÿÿkÿÿÿÿÿÿekÿ*r ÿhpÿÿÿÿÿ^&f,x$v%8tÿ+pAÿÿÿÿ?5ÿSÿÿÿÿÿÿÿ8d0Oÿ!vUUhÿ$cy3ÿC/KsÿUÿYÿÿÿÿÿf. +:P3:ekÿ_X}ÿpÿOÿÿSX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sync_wrapper-1.0.2/src/lib.rsÁM/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sync_wrapper-1.0.2ÁX/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sync_wrapper-1.0.2/src/lib.rsÁ öô-³Ìbö†<ïf[–jÑ…@…@‚CD+2GELG"MƒDJ  #Mb_ad=d`_`^#FY!DGQC? '* )5ddbd` '.%) *<; !(+'&' 6%X< >D<d^bdf '., #_*#:. % 1$!#0# ,PN":"$"/#0# H[N":E”w�éõï½ø´Ï@°õÁWx86_64-unknown-linux-gnuÁK O˜à�UÈS¡67á sync_wrapperÁ-79e8e6a4027930f7Á¤ÙvÏ„œ§س¿únR�3™>>A5A5AÃ?R½ARR‚R¤¤AA‚A‚A‚AÃA‚?‚~@A€‚(A‚A‚(AÃ?~33fRf¤3Af‚?Ñörust-end-file.note.gnu.property.shstrtab.strtab.symtab.rmeta@ .€`¯[&\(\)\5lib.rmeta-link/ 0 0 0 644 656 ` ELF>@@GNUÀHsync_wrapper-79e8e6a4027930f7.sync_wrapper.a79c84cf0076d9a4-cgu.0.rcgu.oÁrust-end-file.note.gnu.property.rmeta-link.shstrtab.strtab.symtab@ €`X2¸*Ð Ñ:/0 0 0 0 644 632 ` ELF>ø@@rustc version 1.98.1 (48a229cea 2026-09-01)0ñÿ.text.comment.note.GNU-stack.strtab.symtabsync_wrapper.a79c84cf0076d9a4-cgu.0  T@0@-m(p0