2024-05-10 22:34:32 -03:00

74 lines
1.7 KiB
Rust

use {
async_trait::async_trait,
eyre::Result,
lool::logger::info,
rustler_core::{
rustler,
rustlers::{Rustler, RustlerAccessor, RustlerStatus, Ticker},
},
std::collections::HashMap,
};
rustler!(
/// A fake rustler that does nothing but changing between different statuses.
pub struct FooRustler {}
);
#[allow(dead_code)]
impl FooRustler {
pub fn create() -> impl Rustler {
Self::default()
}
pub fn create_with_external_stuff(name: String) -> impl Fn() -> FooRustler {
move || {
println!("Creating a new FooRustler using external name = {}", name);
Self::default()
}
}
}
#[async_trait]
impl Rustler for FooRustler {
async fn connect(&mut self) -> Result<()> {
if self.status == RustlerStatus::Connected || self.status == RustlerStatus::Connecting {
return Ok(());
}
self.set_status(RustlerStatus::Connecting)?;
info!("Connecting to data source");
self.set_status(RustlerStatus::Connected)?;
Ok(())
}
async fn disconnect(&mut self) -> Result<()> {
if self.status == RustlerStatus::Disconnected || self.status == RustlerStatus::Disconnecting
{
return Ok(());
}
self.set_status(RustlerStatus::Disconnecting)?;
info!("Disconnecting from data source");
self.set_status(RustlerStatus::Disconnected)?;
Ok(())
}
fn on_add(&mut self, tickers: &[Ticker]) -> Result<()> {
info!("Adding tickers: {:?}", tickers);
Ok(())
}
fn on_delete(&mut self, tickers: &[Ticker]) -> Result<()> {
info!("Deleting tickers: {:?}", tickers);
Ok(())
}
}