use crate::errors::LBError;
use super::safe_math::SafeMath;
use super::u64x64_math::SCALE_OFFSET;
use anchor_lang::prelude::Result;
use ruint::aliases::U256;
pub fn get_liquidity(x: u64, y: u64, price: u128) -> Result<u128> {
let x: U256 = U256::from(x);
let price = U256::from(price);
let px = price.safe_mul(x)?;
let y = u128::from(y).safe_shl(SCALE_OFFSET.into())?;
let y = U256::from(y);
let liquidity = px.safe_add(U256::from(y))?;
Ok(liquidity.try_into().map_err(|_| LBError::TypeCastFailed)?)
}