// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.7; library Flags { /* ========== FLAGS ========== */ /// @dev Flag to unwrap ETH uint256 public constant UNWRAP_ETH = 0; /// @dev Flag to revert if external call fails uint256 public constant REVERT_IF_EXTERNAL_FAIL = 1; /// @dev Flag to call proxy with a sender contract uint256 public constant PROXY_WITH_SENDER = 2; /// @dev Data is hash in DeBridgeGate send method uint256 public constant SEND_HASHED_DATA = 3; /// @dev First 24 bytes from data is gas limit for external call uint256 public constant SEND_EXTERNAL_CALL_GAS_LIMIT = 4; /// @dev Support multi send for externall call uint256 public constant MULTI_SEND = 5; /// @dev Get flag /// @param _packedFlags Flags packed to uint256 /// @param _flag Flag to check function getFlag( uint256 _packedFlags, uint256 _flag ) internal pure returns (bool) { uint256 flag = (_packedFlags >> _flag) & uint256(1); return flag == 1; } /// @dev Set flag /// @param _packedFlags Flags packed to uint256 /// @param _flag Flag to set /// @param _value Is set or not set function setFlag( uint256 _packedFlags, uint256 _flag, bool _value ) internal pure returns (uint256) { if (_value) return _packedFlags | uint256(1) << _flag; else return _packedFlags & ~(uint256(1) << _flag); } }