use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use crate::error::Result;
use crate::primitives::Address;
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub struct Reputation {
pub score: f64,
pub samples: u32,
}
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
pub struct PoolScore {
pub score: f64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Advice {
pub action: String,
pub conviction: f64,
pub reason: String,
}
#[async_trait]
pub trait SignalSource: Send + Sync {
async fn reputation(&self, deployer: &Address) -> Result<Reputation>;
async fn pool_score(&self, pool: &Address) -> Result<PoolScore>;
async fn advice(&self, token: &Address) -> Result<Advice>;
}