```\n// Some aggregators require ETH fees\nuint256 fee = msg.value;\n\nif (address(tokenFrom) == Constants.ETH) {\n    // If tokenFrom is ETH, msg.value = fee + amountFrom (total fee could be 0)\n    require(amountFrom <= fee, "MSG\_VAL\_INSUFFICIENT");\n    fee -= amountFrom;\n    // Can't deal with ETH, convert to WETH\n    IWETH weth = getWETH();\n    weth.deposit{value: amountFrom}();\n    \_approveSpender(weth, spender, amountFrom);\n} else {\n    // Otherwise capture tokens from sender\n    // tokenFrom.safeTransferFrom(recipient, address(this), amountFrom);\n    \_approveSpender(tokenFrom, spender, amountFrom);\n}\n\n// Perform the swap\naggregator.functionCallWithValue(abi.encodePacked(method, data), fee);\n```\n