1use async_trait::async_trait;
2use serde::{Deserialize, Serialize};
3
4use crate::error::Result;
5use crate::primitives::Address;
6
7#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
11pub struct Reputation {
12 pub score: f64,
14 pub samples: u32,
15}
16
17#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
19pub struct PoolScore {
20 pub score: f64,
21}
22
23#[derive(Clone, Debug, Serialize, Deserialize)]
25pub struct Advice {
26 pub action: String,
27 pub conviction: f64,
28 pub reason: String,
29}
30
31#[async_trait]
35pub trait SignalSource: Send + Sync {
36 async fn reputation(&self, deployer: &Address) -> Result<Reputation>;
37 async fn pool_score(&self, pool: &Address) -> Result<PoolScore>;
38 async fn advice(&self, token: &Address) -> Result<Advice>;
39}