pub struct Signal {
pub source_queries: Vec<SourceQuery>,
pub processor: Processor,
pub post_processors: Vec<PostProcessor>,
}Expand description
A complete definition for computing a signal value.
The Signal struct encapsulates all the information required to compute a signal value:
the sources to query for input data, the processing strategy to apply, and any
post-processing transformations to perform on the result.
Signals are the fundamental building blocks of the registry system, allowing for flexible and configurable computation of asset information from various data sources.
§Components
source_queries- Definitions of where and how to obtain input dataprocessor- Strategy for combining data from different sourcespost_processors- Optional transformations to apply to the processed value
§Examples
use bothan_lib::registry::signal::Signal;
use bothan_lib::registry::source::{SourceQuery, OperationRoute, Operation};
use bothan_lib::registry::processor::{Processor, median::MedianProcessor};
use bothan_lib::registry::post_processor::{PostProcessor, tick::TickPostProcessor};
// Create a BTC-USD signal that uses data from multiple sources
let signal = Signal::new(
// Source queries
vec![
SourceQuery::new(
"binance".to_string(),
"btcusdt".to_string(),
vec![
// Apply USDT-USD conversion route
OperationRoute::new("USDT-USD".to_string(), Operation::Multiply),
],
),
SourceQuery::new(
"coinbase".to_string(),
"BTC-USD".to_string(),
vec![],
),
],
// Processor (median with at least 1 source required)
Processor::Median(MedianProcessor { min_source_count: 1 }),
// Post-processors (convert to tick value)
vec![PostProcessor::TickConvertor(TickPostProcessor {})],
);Fields§
§source_queries: Vec<SourceQuery>Source queries that define where to obtain input data.
Each query specifies a data source, an identifier within that source, and optionally a series of routes to apply to the data before processing.
processor: ProcessorThe processing strategy to apply to the source data.
This defines how data from different sources will be combined into a single output value, such as by taking the median or weighted median.
post_processors: Vec<PostProcessor>Optional post-processing transformations to apply to the processed value.
These transformations are applied in sequence after the main processing step, allowing for additional adjustments like tick conversion.
Implementations§
Source§impl Signal
impl Signal
Sourcepub fn new(
source_queries: Vec<SourceQuery>,
processor: Processor,
post_processors: Vec<PostProcessor>,
) -> Self
pub fn new( source_queries: Vec<SourceQuery>, processor: Processor, post_processors: Vec<PostProcessor>, ) -> Self
Creates a new Signal with the specified components.
This method constructs a complete signal definition from its constituent parts: the source queries for input data, the processor for combining data, and any post-processors for transforming the result.
§Examples
use bothan_lib::registry::signal::Signal;
use bothan_lib::registry::source::SourceQuery;
use bothan_lib::registry::processor::{Processor, median::MedianProcessor};
use bothan_lib::registry::post_processor::PostProcessor;
// Create a simple signal with a median processor
let signal = Signal::new(
vec![
SourceQuery::new("exchange1".to_string(), "btc-usd".to_string(), vec![]),
SourceQuery::new("exchange2".to_string(), "btc-usd".to_string(), vec![]),
],
Processor::Median(MedianProcessor { min_source_count: 2 }),
vec![], // No post-processors
);Trait Implementations§
Source§impl<'__de, __Context> BorrowDecode<'__de, __Context> for Signal
impl<'__de, __Context> BorrowDecode<'__de, __Context> for Signal
Source§fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>(
decoder: &mut __D,
) -> Result<Self, DecodeError>
fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>
Source§impl<'de> Deserialize<'de> for Signal
impl<'de> Deserialize<'de> for Signal
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for Signal
Auto Trait Implementations§
impl Freeze for Signal
impl RefUnwindSafe for Signal
impl Send for Signal
impl Sync for Signal
impl Unpin for Signal
impl UnwindSafe for Signal
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request