use std::sync::Arc;
use crate::client::HttpCore;
use crate::error::Result;
use crate::types::*;
#[derive(Debug, Clone)]
pub struct Kol {
pub(crate) core: Arc<HttpCore>,
}
impl Kol {
pub async fn feed(&self, params: &KolFeedParams) -> Result<KolFeedResponse> {
self.core.get("/kol/feed", params).await
}
pub async fn leaderboard(
&self,
params: &KolLeaderboardParams,
) -> Result<KolLeaderboardResponse> {
self.core.get("/kol/leaderboard", params).await
}
pub async fn wallet(
&self,
wallet: &str,
params: &KolWalletParams,
) -> Result<KolWalletProfile> {
self.core.get(&format!("/kol/{}", wallet), params).await
}
pub async fn coordination(
&self,
params: &KolCoordinationParams,
) -> Result<KolCoordinationResponse> {
self.core.get("/kol/coordination", params).await
}
pub async fn token(&self, mint: &str) -> Result<KolTokenActivity> {
self.core
.get(&format!("/kol/tokens/{}", mint), &())
.await
}
pub async fn pairs(&self, params: &KolPairsParams) -> Result<KolPairsResponse> {
self.core.get("/kol/pairs", params).await
}
pub async fn timing(
&self,
wallet: &str,
params: &KolTimingParams,
) -> Result<KolTimingResponse> {
self.core
.get(&format!("/kol/{}/timing", wallet), params)
.await
}
pub async fn hot_tokens(
&self,
params: &KolHotTokensParams,
) -> Result<KolHotTokensResponse> {
self.core.get("/kol/tokens/hot", params).await
}
pub async fn pnl(&self, wallet: &str, params: &KolPnlParams) -> Result<KolPnlResponse> {
self.core
.get(&format!("/kol/{}/pnl", wallet), params)
.await
}
pub async fn trending_tokens(
&self,
params: &KolTrendingParams,
) -> Result<KolTrendingResponse> {
self.core.get("/kol/tokens/trending", params).await
}
pub async fn token_entry_order(
&self,
mint: &str,
params: &KolEntryOrderParams,
) -> Result<KolEntryOrderResponse> {
self.core
.get(
&format!("/kol/tokens/{}/entry-order", mint),
params,
)
.await
}
pub async fn compare(&self, params: &KolCompareParams) -> Result<KolCompareResponse> {
let wallets_joined = params.wallets.join(",");
self.core
.get("/kol/compare", &[("wallets", wallets_joined)])
.await
}
pub async fn alerts(&self, params: &KolAlertsParams) -> Result<KolAlertsResponse> {
let mut query: Vec<(&str, String)> = Vec::new();
if let Some(window) = ¶ms.window {
query.push(("window", window.clone()));
}
if let Some(limit) = params.limit {
query.push(("limit", limit.to_string()));
}
if let Some(types) = ¶ms.types {
if !types.is_empty() {
query.push(("types", types.join(",")));
}
}
self.core.get("/kol/alerts/recent", &query).await
}
}