You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
532 B
26 lines
532 B
use crate::asb::{LatestRate, Rate};
|
|
use crate::kraken;
|
|
use anyhow::Result;
|
|
use tokio::sync::watch::Receiver;
|
|
|
|
#[derive(Clone)]
|
|
pub struct RateService {
|
|
receiver: Receiver<Result<Rate, kraken::Error>>,
|
|
}
|
|
|
|
impl LatestRate for RateService {
|
|
type Error = kraken::Error;
|
|
|
|
fn latest_rate(&mut self) -> Result<Rate, Self::Error> {
|
|
(*self.receiver.borrow()).clone()
|
|
}
|
|
}
|
|
|
|
impl RateService {
|
|
pub async fn new() -> Result<Self> {
|
|
Ok(Self {
|
|
receiver: kraken::connect().await?,
|
|
})
|
|
}
|
|
}
|