solagent_rig_dexscreener/
lib.rs1use 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}