1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! # uniswap-v3-sdk
//!
//! A Rust SDK for building applications on top of Uniswap V3.
//! Migration from the TypeScript [Uniswap/v3-sdk](https://github.com/Uniswap/v3-sdk).
//!
//! ## Features
//!
//! - Opinionated Rust implementation of the Uniswap V3 SDK with a focus on readability and
//!   performance
//! - Usage of [alloy-rs](https://github.com/alloy-rs) types
//! - Reimplementation of the math libraries in [Uniswap V3 Math In Rust](https://github.com/0xKitsune/uniswap-v3-math)
//!   based on optimizations presented in [Uni V3 Lib](https://github.com/Aperture-Finance/uni-v3-lib)
//! - Extensive unit tests and benchmarks
//! - An [`extensions`](./src/extensions) feature for additional functionalities related to Uniswap
//!   V3, including:
//!
//!     - [`pool`](./src/extensions/pool.rs) module for creating a `Pool` struct from a pool key and
//!       fetching the liquidity map within a tick range for the specified pool, using RPC client
//!     - [`position`](./src/extensions/position.rs) module for creating a `Position` struct from a
//!       token id and fetching the state and pool for all positions of the specified owner, using
//!       RPC client, etc
//!     - [`price_tick_conversions`](./src/extensions/price_tick_conversions.rs) module for
//!       converting between prices and ticks
//!     - [`ephemeral_tick_data_provider`](./src/extensions/ephemeral_tick_data_provider.rs) module for fetching ticks using
//!       an [ephemeral contract](https://github.com/Aperture-Finance/Aperture-Lens/blob/904101e4daed59e02fd4b758b98b0749e70b583b/contracts/EphemeralGetPopulatedTicksInRange.sol)
//!       in a single `eth_call`

pub mod abi;
pub mod constants;
pub mod entities;
pub mod multicall;
pub mod nonfungible_position_manager;
pub mod payments;
pub mod quoter;
pub mod self_permit;
pub mod staker;
pub mod swap_router;
pub mod utils;

#[cfg(feature = "extensions")]
pub mod extensions;

#[cfg(test)]
mod tests;

pub mod prelude {
    pub use crate::{
        abi::*, constants::*, entities::*, multicall::encode_multicall,
        nonfungible_position_manager::*, payments::*, quoter::*, self_permit::*, staker::*,
        swap_router::*, utils::*,
    };

    #[cfg(feature = "extensions")]
    pub use crate::extensions::*;
}