Struct arithmetic derive

```rs

[derive(StructArithmetic)]

struct TokenMap { pub sol: u64, pub eth: u64, pub btc: u64, } ```

turns into

```rs struct TokenMap { pub sol: u64, pub eth: u64, pub btc: u64, } impl TokenMap { pub fn add(&self, other: TokenMap) -> TokenMap { TokenMap { sol: self.sol.checkedadd(other.sol).unwrap(), eth: self.eth.checkedadd(other.eth).unwrap(), btc: self.btc.checkedadd(other.btc).unwrap(), } } pub fn addassign(&mut self, other: TokenMap) { self.sol = self.sol.checkedsub(other.sol).unwrap(); self.eth = self.eth.checkedsub(other.eth).unwrap(); self.btc = self.btc.checkedsub(other.btc).unwrap(); } pub fn sub(&self, other: TokenMap) -> TokenMap { TokenMap { sol: self.sol.checkedsub(other.sol).unwrap(), eth: self.eth.checkedsub(other.eth).unwrap(), btc: self.btc.checkedsub(other.btc).unwrap(), } } pub fn subassign(&self, other: TokenMap) -> TokenMap { self.sol = self.sol.checkedadd(other.sol).unwrap(); self.eth = self.eth.checkedadd(other.eth).unwrap(); self.btc = self.btc.checkedadd(other.btc).unwrap(); } pub fn mul(&self, other: TokenMap) -> TokenMap { TokenMap { sol: self.sol.checkedmul(other.sol).unwrap(), eth: self.eth.checkedmul(other.eth).unwrap(), btc: self.btc.checkedmul(other.btc).unwrap(), } } pub fn div(&self, other: TokenMap) -> TokenMap { TokenMap { sol: self.sol.checkeddiv(other.sol).unwrap(), eth: self.eth.checkeddiv(other.eth).unwrap(), btc: self.btc.checkeddiv(other.btc).unwrap(), } } pub fn divscalar(&self, factor: u64) -> TokenMap { TokenMap { sol: self.sol.checkeddiv(factor).unwrap(), eth: self.eth.checkeddiv(factor).unwrap(), btc: self.btc.checkeddiv(factor).unwrap(), } } pub fn mulscalar(&self, factor: u64) -> TokenMap { TokenMap { sol: self.sol.checkedmul(factor).unwrap(), eth: self.eth.checkedmul(factor).unwrap(), btc: self.btc.checkedmul(factor).unwrap(), } } }

```