Signal

Struct Signal 

Source
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 data
  • processor - Strategy for combining data from different sources
  • post_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: Processor

The 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

Source

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

Source§

fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>

Attempt to decode this type with the given BorrowDecode.
Source§

impl Clone for Signal

Source§

fn clone(&self) -> Signal

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Signal

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<__Context> Decode<__Context> for Signal

Source§

fn decode<__D: Decoder<Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>

Attempt to decode this type with the given Decode.
Source§

impl<'de> Deserialize<'de> for Signal

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Encode for Signal

Source§

fn encode<__E: Encoder>(&self, encoder: &mut __E) -> Result<(), EncodeError>

Encode a given type.
Source§

impl PartialEq for Signal

Source§

fn eq(&self, other: &Signal) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Signal

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,