solagent_rig_dexscreener/
lib.rs

1use serde::{Deserialize, Serialize};
2use solagent_core::{
3    rig::{completion::ToolDefinition, tool::Tool},
4};
5use solagent_parameters::parameters;
6use solagent_plugin_dexscreener::{get_token_data_by_ticker, DexTokenData};
7
8#[derive(Debug, Deserialize)]
9pub struct GetTokenDataByTickerArgs {
10    ticker: String,
11}
12
13#[derive(Deserialize, Serialize)]
14pub struct GetTokenDataByTickerOutput {
15    pub data: DexTokenData,
16}
17
18#[derive(Debug, thiserror::Error)]
19#[error("GetTokenDataByTicker error")]
20pub struct GetTokenDataByTickerError;
21
22#[derive(Default)]
23pub struct GetTokenDataByTicker {}
24
25impl GetTokenDataByTicker {
26    pub fn new() -> Self {
27        GetTokenDataByTicker {}
28    }
29}
30
31impl Tool for GetTokenDataByTicker {
32    const NAME: &'static str = "get_token_data_by_ticker";
33
34    type Error = GetTokenDataByTickerError;
35    type Args = GetTokenDataByTickerArgs;
36    type Output = GetTokenDataByTickerOutput;
37
38    async fn definition(&self, _prompt: String) -> ToolDefinition {
39        ToolDefinition {
40            name: "get_token_data_by_ticker".to_string(),
41            description: "Get the token data for a given token ticker on Dexscreener".to_string(),
42            parameters: parameters!(
43                ticker: String
44            ),
45        }
46    }
47
48    async fn call(&self, args: Self::Args) -> Result<Self::Output, Self::Error> {
49        let data = get_token_data_by_ticker(&args.ticker).await.expect("get_token_data_by_ticker");
50
51        Ok(GetTokenDataByTickerOutput { data })
52    }
53}