Skip to main content

PushDropReason

Enum PushDropReason 

Source
#[non_exhaustive]
pub enum PushDropReason { ScopeMissing, QuoteScope, TradeScope, BroadcastScope, TradeAccIdMismatch, TradeMarketMismatch, NotifyNotSubscribed, TradeDecodeFailed, }
Expand description

v1.4.106 codex 0542 F4 [P3]: WS push drop 原因 closed-set enum (8 variants).

把 4 surface (REST /ws / gRPC subscribe / raw TCP WS / MCP push) 散在 各自代码里的 bump_ws_filtered("foo", ...) 字符串 label 收口为闭合 enum, 防漂移. 任何新增 drop 原因必须在 enum 加 variant, 否则 caller 编译期 不通过 — 强制同步 dashboard label.

与 v1.4.105 之前的 event.event_type.as_str() 自由字符串方案相比:

  • Closed set: enum match 编译期穷举, 不会有 typo trade_markettrade_markete silent drop dashboard.
  • 统一命名: 跨 surface 同 reason 必同一 label (REST trade_market == gRPC trade_market == MCP trade_market, 不再各自 emit “trade” / “trade_acc_id” 混淆 dashboard aggregation).
  • Future-safe: 加新 reason 时 grep PushDropReason:: 找全所有 caller, 不漏 surface.

8 variants 设计依据 (v1.4.106 ship 时):

variantlabel触发场景
ScopeMissingscopeclient 持 scope 不含 event 需要的 (e.g. event 是 trade push 但 client 仅 qot:read)
QuoteScopequotequote push scope 不满足 (legacy event_type label 兼容)
TradeScopetradetrade push scope 不满足 (legacy 兼容)
BroadcastScopebroadcastbroadcast push scope 不满足 (legacy 兼容)
TradeAccIdMismatchtrade_acc_idtrade push event.acc_id ∉ key.allowed_acc_ids
TradeMarketMismatchtrade_markettrade push event.trd_market ∉ key.allowed_markets
NotifyNotSubscribednotify_unsubbroadcast/notify push 但 client 未显式 sub (IsConnSubRecvNotify)
TradeDecodeFailedtrade_decode_failedtrade push body decode 失败, 防御性 drop

as_metric_label() 返定 &'static str 与历史 dashboard label byte-identical (向后兼容).

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

ScopeMissing

通用 scope 不满足 (新加 — 替代各 surface 自定义 event_type label).

§

QuoteScope

Quote push scope 不满足 (legacy event_type=quote label 兼容).

§

TradeScope

Trade push scope 不满足 (legacy event_type=trade label 兼容).

§

BroadcastScope

Broadcast push scope 不满足 (legacy event_type=broadcast label 兼容).

§

TradeAccIdMismatch

Layer 1 — trade push event.acc_id ∉ key.allowed_acc_ids.

§

TradeMarketMismatch

Layer 3 — trade push event.trd_market ∉ key.allowed_markets.

§

NotifyNotSubscribed

notify_subscribe gate (IsConnSubRecvNotify) 未启用.

§

TradeDecodeFailed

Trade push body decode 失败 — 防御性 drop, 防 backend wire 错误推不可解的 push.

Implementations§

Source§

impl PushDropReason

Source

pub fn as_metric_label(&self) -> &'static str

Prometheus reason= label 字符串 (8 固定桶).

Source

pub fn from_legacy_event_type(s: &str) -> Self

v1.4.106 codex 0542 F4 [P3]: 从 v1.4.105 之前的 event_type 字符串 兼容 helper. 让 surface migration 渐进 (旧 event.event_type 字符串 走这个 fn 转 typed). 未识别字符串 → ScopeMissing (向后兼容默认).

用法: PushDropReason::from_legacy_event_type(&event.event_type).

Trait Implementations§

Source§

impl Clone for PushDropReason

Source§

fn clone(&self) -> PushDropReason

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 PushDropReason

Source§

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

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

impl Hash for PushDropReason

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for PushDropReason

Source§

fn eq(&self, other: &PushDropReason) -> 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 Copy for PushDropReason

Source§

impl Eq for PushDropReason

Source§

impl StructuralPartialEq for PushDropReason

Auto Trait Implementations§

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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