! / 0 0 0 0 8 ` // 66 ` overload-2b65450f9f69567a.overload.58b52e15deeee381-cgu.0.rcgu.o/ lib.rmeta/ 0 0 0 644 30664 ` ELF>Hv@@GNUrustt#rustc 1.72.0 (5680fa18f 2023-08-23) }ޱL{ :-8f88c761e33f2651ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5YnFmZܝ--649be05783c8912epWĪ9/-f002c8f83a289c4b &c~~*ĽVa-682387162b570769cfg_ifz$kdgK!--05a2cedbb78c1d4f miniz_oxidePnzn )m-9c3df673b2797081adlerA%lon  2-c6afbee8d1102512 hashbrown8*^| -356231f77d1e268arustc_std_workspace_allocL%gqG-80ed5799bf463787 std_detecta^Ʒc -1bccb7a942e1b311rustc_demanglekŗ,N/ST%L)-bc6864da821ce9a2 addr2line2Ȃ']51:.-4930b3dc482158f7gimli~2)F25˼-65bea4bb6af40828object^]UVW-919f89587cbed68dmemchrk/YO+-c6624cb4360306cdBhnge],Q-f9018f9cee1cc5ff unary_overload_unary_overload_unary_internal assignment_overload_assignment_overload_assignment_internalbinary _overload_binary _overload_binary_internaloverload  @@@    @ O3 Provides a macro to simplify operator overloading.6 7 To use, include the following:<" ```_ extern crate overload;g use overload::overload;A use std::ops; // <- don't forget this or you'll get nasty errorsD   # Introduction 3 Suppose we have the following `struct` definition:6 ```  #[derive(PartialEq, Debug)] struct Val { v: i32 } 0 We can overload the addition of `Val`s like so:3  # extern crate overload; # use overload::overload; # use std::ops; # #[derive(PartialEq, Debug)]! # struct Val { # v: i32 # }@ overload!((a: Val) + (b: Val) -> Val { Val { v: a.v + b.v } });C 3 The macro call above generates the following code:6 ```ignore  impl ops::Add for Val {  type Output = Val;+ fn add(self, b: Val) -> Self::Output {. let a = self; Val { v: a.v + b.v }  }   We are now able to add `Val`s:" !B # overload!((a: Val) + (b: Val) -> Val { Val { v: a.v + b.v } }); E+ assert_eq!(Val{v:3} + Val{v:5}, Val{v:8}); .     # Owned and borrowed types   T If we also wanted to overload addition for the borrowed type `&Val` we could write: W      !   B overload!((a: &Val) + (b: &Val) -> Val { Val { v: a.v + b.v } }); E  N We might also want to overload addition between the owned and borrowed types: Q    !A overload!((a: Val) + (b: &Val) -> Val { Val { v: a.v + b.v } });DA overload!((a: &Val) + (b: Val) -> Val { Val { v: a.v + b.v } });D > Let's see how we can write these combinations more concisely.A r We can include a `?` in front of a type to indicate that it should stand in for both the owned and borrowed type.u  To overload addition for all four combinations between `Val` and `&Val` we can therefore simply include a `?` in front of both types: !B overload!((a: ?Val) + (b: ?Val) -> Val { Val { v: a.v + b.v } });E 6  .    impl ops::Add<&Val> for Val {!, fn add(self, b: &Val) -> Self::Output {/    impl ops::Add for &Val {!.    impl ops::Add<&Val> for &Val {"!/   > We are now able to add `Val`s and `&Val`s in any combination:A !D # overload!((a: ?Val) + (b: ?Val) -> Val { Val { v: a.v + b.v } });G., assert_eq!(Val{v:3} + &Val{v:5}, Val{v:8});/, assert_eq!(&Val{v:3} + Val{v:5}, Val{v:8});/- assert_eq!(&Val{v:3} + &Val{v:5}, Val{v:8});0  # Binary operators ] The general syntax to overload a binary operator between types `` and `` is:` X overload!((: ) (: ) -> { /*body*/ });[  [ Inside the body you can use `` and `` freely to perform any computation. ^ !o The last line of the body needs to be an expression (i.e. no `;` at the end of the line) of type ``.!r "X | Operator | Example | Trait |"[X |----------|-----------------------------------------------------------------|--------|#[c | + | `overload!((a: A) + (b: B) -> C { /*...*/ );` | Add | #fX | - | `overload!((a: A) - (b: B) -> C { /*...*/ );` | Sub |$[X | * | `overload!((a: A) * (b: B) -> C { /*...*/ );` | Mul |%[X | / | `overload!((a: A) / (b: B) -> C { /*...*/ );` | Div |&[X | % | `overload!((a: A) % (b: B) -> C { /*...*/ );` | Rem |&[X | & | `overload!((a: A) & (b: B) -> C { /*...*/ );` | BitAnd |'[X | \| | overload!((a: A) | (b: B) -> C { /\*...*\/ ); | BitOr |([X | ^ | `overload!((a: A) ^ (b: B) -> C { /*...*/ );` | BitXor |([X | << | `overload!((a: A) << (b: B) -> C { /*...*/ );` | Shl |)[X | >> | `overload!((a: A) >> (b: B) -> C { /*...*/ );` | Shr |*[ + # Assignment operators+ +b The general syntax to overload an assignment operator between types `` and `` is:+e, O overload!((: &mut ) (: ) { /*body*/ });,R ,} Inside the body you can use `` and `` freely to perform any computation and mutate `` as desired.- ._ | Operator | Example | Trait |.b_ |----------|------------------------------------------------------------------|--------------|.bj | += | `overload!((a: &mut A) += (b: B) { /*...*/ );` | AddAssign | /m_ | -= | `overload!((a: &mut A) -= (b: B) { /*...*/ );` | SubAssign |0b_ | *= | `overload!((a: &mut A) *= (b: B) { /*...*/ );` | MulAssign |1b_ | /= | `overload!((a: &mut A) /= (b: B) { /*...*/ );` | DivAssign |2b_ | %= | `overload!((a: &mut A) %= (b: B) { /*...*/ );` | RemAssign |2b_ | &= | `overload!((a: &mut A) &= (b: B) { /*...*/ );` | BitAndAssign |3b_ | \|= | overload!((a: &mut A) |= (b: B) { /\*...*\/ ); | BitOrAssign |4b_ | ^= | `overload!((a: &mut A) ^= (b: B) { /*...*/ );` | BitXorAssign |5b_ | <<= | `overload!((a: &mut A) <<= (b: B) { /*...*/ );` | ShlAssign |5b_ | >>= | `overload!((a: &mut A) >>= (b: B) { /*...*/ );` | ShrAssign |6b 7 # Unary operators7 7H The general syntax to overload a unary operator for type `` is:7K8 B overload!( (: ) -> { /*body*/ });8E 8K Inside the body you can use `` freely to perform any computation.9N 9+9r :O | Operator | Example | Trait |:RO |----------|---------------------------------------------------------|-------|;RO | - | `overload!(- (a: A) -> B { /*...*/ );` | Neg |;RQ | ! | `overload!(! (a: A) -> B { /*...*/ );` | Not |  > >  > >3     0 #@PVc WXZ[a\ t]^  _ beh i  Neg  M   M      Not  M %    # op_trait  op_fn    M      body    R  M "     R       T>> > > > 3!    0 #@U([i \^`agb Mcd  e hkn o  AddAssign    M   M      SubAssign     M   M      MulAssign    M   M      DivAssign    M   M      RemAssign     M   M      BitAndAssign    M   M      BitOrAssign    M   M      BitXorAssign    M   M      ShlAssign     M   M      ShrAssign     M *    #  " R  R  li     ri             T              R                 R            s           r       T  > > > > ?3    0 #@Q(Wd XY[\b] M^_  ` cfi  j  Add  M   M       Sub   M   M       Mul  M   M       Div  M   M       Rem  M   M       BitAnd  M   M       BitOr  M   M       BitXor  M   M       Shl   M   M       Shr   M &    # ' R  R  r     s         T     R      "     R  s         r       T  @^ Overloads an operator. See the [module level documentation](index.html) for more information.?a? ? !?@ ??#@@O @A@ op@@  @@@ @ @@ @@@@ M@@  @@@ @@  @@ T@A AAAA A AAAA ҚAAA AAA MAAA AAA TAA A AAAA ҚAAA AA AA MAAA AAA TAAABBB ҚBB  BBB B BB BBB MBB  BBB BB  BB TBB BBBC B BBCB ҚBBC CCC MCCC CCC TCCCCD CC C rCC CC C CC CC  CC ҚCC  CCD C sCC CCCC  DD  DD TDD DDDE D DDDD ҚDDD rDDD DDD sDDD  DDD TDD D DDED ҚDDD rDDE EEE sEE EE  EEE TEEEEF EE E rEE EE E EE EE  EE ҚEE  EEF E sEE EEE  FF  FF TFF FFFF F FFFF ҚFFF rFFF FFF sFFF  FFF TFFFGGGG G rGG GGGG GG  GG ҚGG  GGG G sGG GGGG  GG  GGG GG  GG TGG GGGI G GGHG ҚGGG rGGG GGG sHHH  HHH HHH THH H HHHH ҚHHH rHHH HHH sHH HH  HHH HHH THH H HHIH ҚHHH rHH HH HII sIII  III III TII I IIII ҚIII rII II III sII II  III III TIIIJJJJ J rJJ JJJJ JJ  JJ ҚJJ  JJJ J sJJ JJJ  JJ  JJJ JJ  JJ TJJ JJJK J JJKJ ҚJJJ rJJJ JJK sKKK  KKK KKK TKK K KKKK ҚKKK rKK KK KKK sKKK  KKK KKK TKKKLLLL L rLL LLL LL  LL ҚLL  LLL L sLL LLLL  LL  LLL LL  LL TLL LLLM L LLML ҚLLL rLLL LLL sLMM  MMM MMM TMM M MMMM ҚMMM rMMM MMM sMM MM  MMM MMM TMMMNNNN N rNN NNN NN  NN ҚNN  NNN N sNN NNN  NN  NNN NN  NN TNN NNNO N NNON ҚNNN rNNN NNN sNNO  OOO OOO TOOO index.html.X$_z.XtH с.X=؍Q}.X-[~<.Xf2f.Xux"y.X> .XI8.X5üv0A.X4yru.X(kb.XJ~.Xp!%=%%(,C,s8%<R<FHL%%>,M<%%%%%%%%%K&)<,,8K<<H(M7%%%%(,>,m8<M<@HyL%%%F&)6,,8E<<H"M%%4,C< 9]jL&),8<H)Mjg.X'R$kljtj|jjjjODHT .XJ~ .X5üv0A.XtH .X4yru .Xf2f.X> .XI8.Xux"y.X$_z.Xp .X=؍Q}.X(kb .X-[~<W hq3D`C8MSW hq3D`C8MS^/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/overload-0.1.1/src/unary.rs !;)  BtQUQ$FF$(X% . 4{T45(<4,O?@-M? WABBCUABUAB SAu,hYjxuY27<_g      !"#$%&'()*+,-./ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !!""##$%&&'(()*++++,,,-.../0122345567777888999::;;<====>>>>>>>>>???@@@AAAABBCCCDDEEEFFFFGHHIIIJJKKKLLMMMMNOOO[lJmZnjox86_64-unknown-linux-gnu+|WDNO- -2b65450f9f69567a.X  hPhP 4 44444((4444U.note.gnu.property.shstrtab.strtab.symtab.rmeta@ .`u&uvv5/0 0 0 0 644 584 ` ELF>@@6.text.debug_aranges.note.GNU-stack.strtab.symtaboverload.58b52e15deeee381-cgu.0&pV@@@.@0