Skip to main content

ids_apis/
kdo.v1.pair.rs

1// @generated
2// This file is @generated by prost-build.
3// ============================================================================
4// Pair Entity
5// ============================================================================
6
7/// Pair 전략 — 두 심볼의 가격 조건에 따른 동시 주문 설정
8#[allow(clippy::derive_partial_eq_without_eq)]
9#[derive(Clone, PartialEq, ::prost::Message)]
10pub struct Pair {
11    /// 리소스 이름 (pairs/{id})
12    #[prost(string, tag="1")]
13    pub name: ::prost::alloc::string::String,
14    /// Pair ID
15    #[prost(int32, tag="2")]
16    pub id: i32,
17    /// 전략 이름 (고유)
18    #[prost(string, tag="3")]
19    pub display_name: ::prost::alloc::string::String,
20    /// Portfolio ID
21    #[prost(int32, tag="4")]
22    pub portfolio_id: i32,
23    /// Base 엔트리
24    #[prost(message, optional, tag="5")]
25    pub base: ::core::option::Option<PairEntry>,
26    /// Counter 엔트리
27    #[prost(message, optional, tag="6")]
28    pub counter: ::core::option::Option<PairEntry>,
29    /// 상태
30    #[prost(enumeration="PairStatus", tag="9")]
31    pub status: i32,
32    /// 실행 모드 (oneof)
33    #[prost(message, optional, tag="10")]
34    pub mode: ::core::option::Option<PairMode>,
35    /// 생성 시간
36    #[prost(message, optional, tag="11")]
37    pub create_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
38    /// 수정 시간
39    #[prost(message, optional, tag="12")]
40    pub update_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
41}
42// ============================================================================
43// Pair Entry
44// ============================================================================
45
46/// 페어의 한쪽 엔트리 (단일 심볼 주문 스펙)
47#[allow(clippy::derive_partial_eq_without_eq)]
48#[derive(Clone, PartialEq, ::prost::Message)]
49pub struct PairEntry {
50    /// 종목 심볼
51    #[prost(string, tag="1")]
52    pub symbol: ::prost::alloc::string::String,
53    /// 주문에 사용할 펀드 코드
54    #[prost(string, tag="2")]
55    pub fund_code: ::prost::alloc::string::String,
56    /// 주문 방향
57    #[prost(enumeration="PairSide", tag="3")]
58    pub side: i32,
59    /// 주문 수량 (1 이상)
60    #[prost(int64, tag="4")]
61    pub quantity: i64,
62    /// 참조 가격 소스
63    #[prost(enumeration="PriceSource", tag="5")]
64    pub price_source: i32,
65    /// 지정가 산출 시 참조 호가에서 이동할 틱 수
66    /// Bid: 양수 = 더 높은 가격. Ask: 양수 = 더 낮은 가격.
67    #[prost(int32, tag="6")]
68    pub price_offset_ticks: i32,
69}
70// ============================================================================
71// Pair Condition (oneof wrapper)
72// ============================================================================
73
74/// 페어 가격 비교 조건 (세 가지 variant 중 하나)
75#[allow(clippy::derive_partial_eq_without_eq)]
76#[derive(Clone, Copy, PartialEq, ::prost::Message)]
77pub struct PairCondition {
78    #[prost(oneof="pair_condition::Kind", tags="1, 2, 3")]
79    pub kind: ::core::option::Option<pair_condition::Kind>,
80}
81/// Nested message and enum types in `PairCondition`.
82pub mod pair_condition {
83    #[allow(clippy::derive_partial_eq_without_eq)]
84#[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
85    pub enum Kind {
86        /// 절대 스프레드 금액 기준
87        #[prost(message, tag="1")]
88        SpreadAmount(super::SpreadAmountCondition),
89        /// 상대 스프레드 (bps) 기준
90        #[prost(message, tag="2")]
91        SpreadBps(super::SpreadBpsCondition),
92        /// 가격 비율 기준
93        #[prost(message, tag="3")]
94        PriceRatio(super::PriceRatioCondition),
95    }
96}
97/// 절대 스프레드 금액 조건 (|base - counter| >= threshold)
98#[allow(clippy::derive_partial_eq_without_eq)]
99#[derive(Clone, Copy, PartialEq, ::prost::Message)]
100pub struct SpreadAmountCondition {
101    /// 스프레드 임계값 (원, 1 이상)
102    #[prost(int64, tag="1")]
103    pub threshold: i64,
104    /// 트리거 방향
105    #[prost(enumeration="SpreadDirection", tag="2")]
106    pub direction: i32,
107}
108/// 상대 스프레드 (bps) 조건 (|spread| / mid * 10000 >= threshold_bps, base 기준)
109#[allow(clippy::derive_partial_eq_without_eq)]
110#[derive(Clone, Copy, PartialEq, ::prost::Message)]
111pub struct SpreadBpsCondition {
112    /// 스프레드 임계값 (bps, 1bp = 0.01%)
113    #[prost(double, tag="1")]
114    pub threshold_bps: f64,
115    /// 트리거 방향
116    #[prost(enumeration="SpreadDirection", tag="2")]
117    pub direction: i32,
118}
119/// 가격 비율 조건 (base / counter)
120#[allow(clippy::derive_partial_eq_without_eq)]
121#[derive(Clone, Copy, PartialEq, ::prost::Message)]
122pub struct PriceRatioCondition {
123    /// 최소 비율 (이 값 미만이면 CounterHigh 트리거)
124    #[prost(double, tag="1")]
125    pub min_ratio: f64,
126    /// 최대 비율 (이 값 초과 시 BaseHigh 트리거)
127    #[prost(double, tag="2")]
128    pub max_ratio: f64,
129}
130// ============================================================================
131// Pair Mode (oneof wrapper)
132// ============================================================================
133
134/// Pair 실행 모드
135#[allow(clippy::derive_partial_eq_without_eq)]
136#[derive(Clone, Copy, PartialEq, ::prost::Message)]
137pub struct PairMode {
138    #[prost(oneof="pair_mode::Kind", tags="1, 2, 3")]
139    pub kind: ::core::option::Option<pair_mode::Kind>,
140}
141/// Nested message and enum types in `PairMode`.
142pub mod pair_mode {
143    #[allow(clippy::derive_partial_eq_without_eq)]
144#[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
145    pub enum Kind {
146        /// 기존 동작: 두 시세 비교 후 조건 충족 시 양측 동시 발주
147        #[prost(message, tag="1")]
148        SimultaneousCompare(super::SimultaneousCompare),
149        /// 신규: pricer 시세 기반 maker 호가 유지 + 체결 시 taker 헷지
150        #[prost(message, tag="2")]
151        PricingMakerTaker(super::PricingMakerTaker),
152        /// 신규: base maker 호가 유지, counter IOC 헷지 + 잔량 추적 처리
153        #[prost(message, tag="3")]
154        BaseMakeCounterIocAndBalance(super::BaseMakeCounterIocAndBalance),
155    }
156}
157/// BaseMakeCounterIocAndBalance 모드 설정
158#[allow(clippy::derive_partial_eq_without_eq)]
159#[derive(Clone, Copy, PartialEq, ::prost::Message)]
160pub struct BaseMakeCounterIocAndBalance {
161    /// counter leg 역방향 여부 (true: counter 측 방향을 base와 반대로 설정)
162    #[prost(bool, tag="3")]
163    pub counter_inverse: bool,
164    /// IOC 발주 시 불균형 감지 임계 비율 (잔량 / 목표수량, 이 값 초과 시 재발주)
165    #[prost(double, tag="4")]
166    pub imbalance_threshold_ratio: f64,
167    /// 불균형 회복 목표 비율 (재발주 시 목표 충족 비율)
168    #[prost(double, tag="5")]
169    pub imbalance_recovery_ratio: f64,
170    /// 결제(settle) 타임아웃 (ms, 이 시간 내 미결제 시 경보)
171    #[prost(uint64, tag="6")]
172    pub settle_timeout_ms: u64,
173    /// 잔량 조정 경보 임계값 (원, 이 금액 초과 시 경보 로그)
174    #[prost(int64, tag="7")]
175    pub reconcile_alert_amount: i64,
176    /// 트리거 후 재트리거까지 대기시간 (ms)
177    #[prost(uint64, tag="8")]
178    pub cooldown_ms: u64,
179    /// NAV 계산 공식 종류 (서버 런타임에 PricingContext 엔티티 조회, proto엔 종류만 지정)
180    #[prost(enumeration="EtfNavKind", tag="9")]
181    pub nav_kind: i32,
182    /// Bid quote 산출용 basis 오프셋 (원, raw int64)
183    #[prost(int64, tag="10")]
184    pub bid_basis: i64,
185    /// Ask quote 산출용 basis 오프셋 (원, raw int64)
186    #[prost(int64, tag="11")]
187    pub ask_basis: i64,
188}
189/// SimultaneousCompare 모드 설정
190#[allow(clippy::derive_partial_eq_without_eq)]
191#[derive(Clone, Copy, PartialEq, ::prost::Message)]
192pub struct SimultaneousCompare {
193    /// 가격 비교 조건
194    #[prost(message, optional, tag="1")]
195    pub condition: ::core::option::Option<PairCondition>,
196    /// 주문 유형
197    #[prost(enumeration="PairOrderType", tag="2")]
198    pub order_type: i32,
199    /// 트리거 후 재트리거까지 대기시간 (ms)
200    #[prost(uint64, tag="3")]
201    pub cooldown_ms: u64,
202    /// hit 직후 지정가 조정 여부
203    #[prost(bool, tag="4")]
204    pub apply_tick_offset: bool,
205}
206/// PricingMakerTaker 모드 설정
207#[allow(clippy::derive_partial_eq_without_eq)]
208#[derive(Clone, Copy, PartialEq, ::prost::Message)]
209pub struct PricingMakerTaker {
210    /// maker 역할 leg (BASE or COUNTER; 반대 leg가 pricer 겸 taker)
211    #[prost(enumeration="PairLeg", tag="1")]
212    pub maker_leg: i32,
213    /// pricer → maker 가격 환산 방식
214    #[prost(message, optional, tag="2")]
215    pub pricing: ::core::option::Option<PairPricingMethod>,
216    /// 정정(retick) 정책
217    #[prost(message, optional, tag="3")]
218    pub retick: ::core::option::Option<RetickPolicy>,
219    /// taker(헷지) 측 주문 유형
220    #[prost(enumeration="PairOrderType", tag="4")]
221    pub taker_order_type: i32,
222}
223// ============================================================================
224// Pair Pricing Method (oneof wrapper)
225// ============================================================================
226
227/// pricer 가격으로부터 maker fair price를 산출하는 방식
228#[allow(clippy::derive_partial_eq_without_eq)]
229#[derive(Clone, Copy, PartialEq, ::prost::Message)]
230pub struct PairPricingMethod {
231    #[prost(oneof="pair_pricing_method::Method", tags="1, 2")]
232    pub method: ::core::option::Option<pair_pricing_method::Method>,
233}
234/// Nested message and enum types in `PairPricingMethod`.
235pub mod pair_pricing_method {
236    #[allow(clippy::derive_partial_eq_without_eq)]
237#[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
238    pub enum Method {
239        /// 선형 환산: maker_price = pricer_price * multiple + basis(side)
240        #[prost(message, tag="1")]
241        LinearBasis(super::LinearBasis),
242        /// ETF NAV 기반 환산 (ETF↔선물 비선형 케이스)
243        #[prost(message, tag="2")]
244        EtfNav(super::EtfNav),
245    }
246}
247/// 선형 환산 방식
248#[allow(clippy::derive_partial_eq_without_eq)]
249#[derive(Clone, Copy, PartialEq, ::prost::Message)]
250pub struct LinearBasis {
251    /// 배율 (예: 1.0, non-zero finite)
252    #[prost(double, tag="1")]
253    pub multiple: f64,
254    /// Bid quote 산출용 basis 오프셋 (원)
255    #[prost(int64, tag="2")]
256    pub basis_bid: i64,
257    /// Ask quote 산출용 basis 오프셋 (원)
258    #[prost(int64, tag="3")]
259    pub basis_ask: i64,
260}
261/// ETF NAV 기반 환산 방식
262#[allow(clippy::derive_partial_eq_without_eq)]
263#[derive(Clone, Copy, PartialEq, ::prost::Message)]
264pub struct EtfNav {
265    /// NAV 계산 공식 종류
266    #[prost(enumeration="EtfNavKind", tag="1")]
267    pub pricing_kind: i32,
268    /// 환산 방향 (Inverse: pricer=ETF→maker=선물, Forward: pricer=선물→maker=ETF)
269    #[prost(enumeration="NavDirection", tag="2")]
270    pub direction: i32,
271    /// 정적 pricing 파라미터 snapshot
272    #[prost(message, optional, tag="3")]
273    pub ctx: ::core::option::Option<PricingContextSnapshot>,
274    /// Bid quote 산출용 basis (원, raw int64)
275    #[prost(int64, tag="4")]
276    pub bid_basis: i64,
277    /// Ask quote 산출용 basis (원, raw int64)
278    #[prost(int64, tag="5")]
279    pub ask_basis: i64,
280    /// PDF/Pdf fallback용 선형 배율 (inverse 모드, 기본 1.0)
281    #[prost(double, tag="6")]
282    pub linear_fallback_multiplier: f64,
283    /// FutureBasis/LeverageFuture variant의 전일 기초지수 가격 (원, raw int64)
284    /// EtfNavKind가 FUTURE_BASIS 또는 LEVERAGE_FUTURE일 때 필수
285    #[prost(int64, tag="7")]
286    pub prev_index: i64,
287    /// LeverageFuture variant의 전일 선물 가격 (원, raw int64)
288    /// EtfNavKind가 LEVERAGE_FUTURE일 때 필수
289    #[prost(int64, tag="8")]
290    pub prev_future: i64,
291}
292/// PricingContext 정적 파라미터 snapshot
293/// (Price 타입은 i64 raw value 기반 — int64로 직렬화)
294#[allow(clippy::derive_partial_eq_without_eq)]
295#[derive(Clone, Copy, PartialEq, ::prost::Message)]
296pub struct PricingContextSnapshot {
297    /// 전일 NAV (LeverageFuture의 nav0)
298    #[prost(int64, tag="1")]
299    pub nav0: i64,
300    /// 바스켓 내 현물(Stock/ETF) 비중 (0.0 ~ 1.0)
301    #[prost(double, tag="2")]
302    pub stock_ratio: f64,
303    /// 실질 레버리지 (= unit_delta / Nav0, 인버스면 부호 반전)
304    #[prost(double, tag="3")]
305    pub actual_leverage: f64,
306    /// 단위 델타 (unit_delta)
307    #[prost(int64, tag="4")]
308    pub unit_delta: i64,
309    /// 주당 현금 (cash_per_share)
310    #[prost(int64, tag="5")]
311    pub cash_per_share: i64,
312    /// 지수 추종 배율 (IndexTrackingHedge 시 필수, 그 외 미사용)
313    #[prost(int64, optional, tag="6")]
314    pub tracking_multiple: ::core::option::Option<i64>,
315}
316// ============================================================================
317// Retick Policy
318// ============================================================================
319
320/// maker 정정(amend) 정책
321#[allow(clippy::derive_partial_eq_without_eq)]
322#[derive(Clone, Copy, PartialEq, ::prost::Message)]
323pub struct RetickPolicy {
324    /// fair 가격이 이 tick 수 이상 이동해야 정정 (1 이상)
325    #[prost(int32, tag="1")]
326    pub tick_threshold: i32,
327    /// 직전 정정으로부터 이만큼 경과해야 다음 정정 허용 (ms)
328    #[prost(uint64, tag="2")]
329    pub amend_cooldown_ms: u64,
330    /// stop 시 미체결 maker 주문 자동 취소 여부
331    #[prost(bool, tag="3")]
332    pub cancel_on_stop: bool,
333}
334// ============================================================================
335// Request / Response Messages — CRUD
336// ============================================================================
337
338#[allow(clippy::derive_partial_eq_without_eq)]
339#[derive(Clone, PartialEq, ::prost::Message)]
340pub struct GetPairRequest {
341    /// 리소스 이름 (pairs/{id})
342    #[prost(string, tag="1")]
343    pub pair: ::prost::alloc::string::String,
344}
345#[allow(clippy::derive_partial_eq_without_eq)]
346#[derive(Clone, PartialEq, ::prost::Message)]
347pub struct ListPairsRequest {
348    /// 페이지 크기 (optional)
349    #[prost(int32, optional, tag="1")]
350    pub page_size: ::core::option::Option<i32>,
351    /// 페이지 토큰 (optional, for pagination)
352    #[prost(string, optional, tag="2")]
353    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
354    /// 필터링 조건 (optional, AIP-160)
355    ///
356    /// Available Fields:
357    /// * status - 상태 (ACTIVE / PAUSED / ARCHIVED)
358    /// * portfolio_id - Portfolio ID
359    ///
360    /// Examples:
361    /// * status=ACTIVE
362    /// * portfolio_id=1
363    #[prost(string, tag="3")]
364    pub filter: ::prost::alloc::string::String,
365}
366#[allow(clippy::derive_partial_eq_without_eq)]
367#[derive(Clone, PartialEq, ::prost::Message)]
368pub struct ListPairsResponse {
369    /// Pair 목록
370    #[prost(message, repeated, tag="1")]
371    pub pairs: ::prost::alloc::vec::Vec<Pair>,
372    /// 다음 페이지 토큰
373    #[prost(string, tag="2")]
374    pub next_page_token: ::prost::alloc::string::String,
375}
376#[allow(clippy::derive_partial_eq_without_eq)]
377#[derive(Clone, PartialEq, ::prost::Message)]
378pub struct CreatePairRequest {
379    /// 생성할 Pair
380    #[prost(message, optional, tag="1")]
381    pub pair: ::core::option::Option<Pair>,
382}
383#[allow(clippy::derive_partial_eq_without_eq)]
384#[derive(Clone, PartialEq, ::prost::Message)]
385pub struct UpdatePairRequest {
386    /// 수정할 Pair
387    #[prost(message, optional, tag="1")]
388    pub pair: ::core::option::Option<Pair>,
389}
390#[allow(clippy::derive_partial_eq_without_eq)]
391#[derive(Clone, PartialEq, ::prost::Message)]
392pub struct DeletePairRequest {
393    /// 리소스 이름 (pairs/{id})
394    #[prost(string, tag="1")]
395    pub pair: ::prost::alloc::string::String,
396}
397// ============================================================================
398// Request / Response Messages — Lifecycle
399// ============================================================================
400
401#[allow(clippy::derive_partial_eq_without_eq)]
402#[derive(Clone, PartialEq, ::prost::Message)]
403pub struct ActivatePairRequest {
404    /// 리소스 이름 (pairs/{id})
405    #[prost(string, tag="1")]
406    pub pair: ::prost::alloc::string::String,
407}
408#[allow(clippy::derive_partial_eq_without_eq)]
409#[derive(Clone, PartialEq, ::prost::Message)]
410pub struct PausePairRequest {
411    /// 리소스 이름 (pairs/{id})
412    #[prost(string, tag="1")]
413    pub pair: ::prost::alloc::string::String,
414}
415// ============================================================================
416// Pair Execution Log (SimultaneousCompare 모드 사이클별 기록)
417// ============================================================================
418
419/// 페어 실행 로그 레코드
420#[allow(clippy::derive_partial_eq_without_eq)]
421#[derive(Clone, PartialEq, ::prost::Message)]
422pub struct PairExecutionLog {
423    /// Pair ID
424    #[prost(int32, tag="1")]
425    pub pair_id: i32,
426    /// 시그널 시나리오 (예: "BASE_HIGH", "COUNTER_HIGH")
427    #[prost(string, tag="2")]
428    pub scenario: ::prost::alloc::string::String,
429    /// 실행 결과
430    #[prost(enumeration="PairExecutionOutcome", tag="3")]
431    pub outcome: i32,
432    /// Base 측 주문 ID (발주 성공 시)
433    #[prost(uint64, optional, tag="4")]
434    pub base_order_id: ::core::option::Option<u64>,
435    /// Counter 측 주문 ID (발주 성공 시)
436    #[prost(uint64, optional, tag="5")]
437    pub counter_order_id: ::core::option::Option<u64>,
438    /// Base 참조 가격 (원, raw int64)
439    #[prost(int64, tag="6")]
440    pub base_price: i64,
441    /// Counter 참조 가격 (원, raw int64)
442    #[prost(int64, tag="7")]
443    pub counter_price: i64,
444    /// 스프레드 (base - counter, 원, raw int64)
445    #[prost(int64, tag="8")]
446    pub spread: i64,
447    /// 발주 시각
448    #[prost(message, optional, tag="9")]
449    pub dispatched_at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
450    /// 상세 내용 (오류 메시지 등, optional)
451    #[prost(string, optional, tag="10")]
452    pub detail: ::core::option::Option<::prost::alloc::string::String>,
453}
454#[allow(clippy::derive_partial_eq_without_eq)]
455#[derive(Clone, PartialEq, ::prost::Message)]
456pub struct ListPairExecutionLogsRequest {
457    /// 리소스 이름 (pairs/{id})
458    #[prost(string, tag="1")]
459    pub pair: ::prost::alloc::string::String,
460    /// 페이지 크기 (기본: 50, 최대: 200)
461    #[prost(int32, optional, tag="2")]
462    pub page_size: ::core::option::Option<i32>,
463    /// 페이지 토큰 (다음 페이지 조회용)
464    #[prost(string, optional, tag="3")]
465    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
466    /// 정렬 기준 (기본: dispatched_at DESC)
467    #[prost(string, tag="4")]
468    pub order_by: ::prost::alloc::string::String,
469}
470#[allow(clippy::derive_partial_eq_without_eq)]
471#[derive(Clone, PartialEq, ::prost::Message)]
472pub struct ListPairExecutionLogsResponse {
473    /// 실행 로그 목록
474    #[prost(message, repeated, tag="1")]
475    pub execution_logs: ::prost::alloc::vec::Vec<PairExecutionLog>,
476    /// 다음 페이지 토큰
477    #[prost(string, tag="2")]
478    pub next_page_token: ::prost::alloc::string::String,
479    /// 전체 건수
480    #[prost(int32, tag="3")]
481    pub total_count: i32,
482}
483// ============================================================================
484// Maker-Taker Event Log (PricingMakerTaker 모드 전용)
485// ============================================================================
486
487/// Maker-Taker 이벤트 로그 레코드
488#[allow(clippy::derive_partial_eq_without_eq)]
489#[derive(Clone, PartialEq, ::prost::Message)]
490pub struct MakerTakerEventLog {
491    /// Pair ID
492    #[prost(int32, tag="1")]
493    pub pair_id: i32,
494    /// 이벤트 유형
495    #[prost(enumeration="MakerTakerEventType", tag="2")]
496    pub event_type: i32,
497    /// 사이클 식별자 (동일 사이클의 이벤트를 묶음)
498    #[prost(int64, tag="3")]
499    pub cycle_id: i64,
500    /// maker 주문 ID (해당 이벤트에서 참조 가능한 경우)
501    #[prost(uint64, optional, tag="4")]
502    pub maker_order_id: ::core::option::Option<u64>,
503    /// taker 주문 ID (TakerSubmitted / TakerFilled 시점)
504    #[prost(uint64, optional, tag="5")]
505    pub taker_order_id: ::core::option::Option<u64>,
506    /// 해당 이벤트 시점의 maker fair price (원, raw int64)
507    #[prost(int64, optional, tag="6")]
508    pub fair_price: ::core::option::Option<i64>,
509    /// 정정 시 새 호가 (MakerAmended 전용, 원, raw int64)
510    #[prost(int64, optional, tag="7")]
511    pub new_price: ::core::option::Option<i64>,
512    /// 체결 가격 (MakerFilled / TakerFilled, 원, raw int64)
513    #[prost(int64, optional, tag="8")]
514    pub fill_price: ::core::option::Option<i64>,
515    /// 체결 수량 (MakerFilled / TakerFilled)
516    #[prost(int64, optional, tag="9")]
517    pub fill_quantity: ::core::option::Option<i64>,
518    /// 이벤트 발생 시각
519    #[prost(message, optional, tag="10")]
520    pub at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
521    /// 상세 내용 (optional)
522    #[prost(string, optional, tag="11")]
523    pub detail: ::core::option::Option<::prost::alloc::string::String>,
524}
525#[allow(clippy::derive_partial_eq_without_eq)]
526#[derive(Clone, PartialEq, ::prost::Message)]
527pub struct ListMakerTakerEventsRequest {
528    /// 리소스 이름 (pairs/{id})
529    #[prost(string, tag="1")]
530    pub pair: ::prost::alloc::string::String,
531    /// 페이지 크기 (기본: 50, 최대: 200)
532    #[prost(int32, optional, tag="2")]
533    pub page_size: ::core::option::Option<i32>,
534    /// 페이지 토큰 (다음 페이지 조회용)
535    #[prost(string, optional, tag="3")]
536    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
537    /// 필터링 조건 (optional)
538    ///
539    /// Available Fields:
540    /// * cycle_id - 사이클 ID
541    /// * event_type - 이벤트 유형
542    #[prost(string, tag="4")]
543    pub filter: ::prost::alloc::string::String,
544    /// 정렬 기준 (기본: at DESC)
545    #[prost(string, tag="5")]
546    pub order_by: ::prost::alloc::string::String,
547}
548#[allow(clippy::derive_partial_eq_without_eq)]
549#[derive(Clone, PartialEq, ::prost::Message)]
550pub struct ListMakerTakerEventsResponse {
551    /// 이벤트 로그 목록
552    #[prost(message, repeated, tag="1")]
553    pub events: ::prost::alloc::vec::Vec<MakerTakerEventLog>,
554    /// 다음 페이지 토큰
555    #[prost(string, tag="2")]
556    pub next_page_token: ::prost::alloc::string::String,
557    /// 전체 건수
558    #[prost(int32, tag="3")]
559    pub total_count: i32,
560}
561// ============================================================================
562// Real-time Status Streaming
563// ============================================================================
564
565/// StreamPairStatus 요청
566#[allow(clippy::derive_partial_eq_without_eq)]
567#[derive(Clone, PartialEq, ::prost::Message)]
568pub struct StreamPairStatusRequest {
569    /// 리소스 이름 (pairs/{id})
570    #[prost(string, tag="1")]
571    pub pair: ::prost::alloc::string::String,
572}
573/// 페어 단일 leg 실시간 상태 스냅샷
574/// (태그 번호는 클라이언트 UI 계약으로 보존됨)
575#[allow(clippy::derive_partial_eq_without_eq)]
576#[derive(Clone, Copy, PartialEq, ::prost::Message)]
577pub struct LegStatus {
578    /// 미체결 수량 (submitted - filled)
579    #[prost(int64, tag="1")]
580    pub unfilled_quantity: i64,
581    /// 누적 체결 수량 (현재 세션 메모리 카운터, 재시작 시 0)
582    #[prost(int64, tag="2")]
583    pub filled_quantity: i64,
584    /// 체결 VWAP (milli-won 단위)
585    #[prost(int64, tag="3")]
586    pub avg_fill_price: i64,
587    /// 누적 발주 수량 (현재 세션 메모리 카운터)
588    #[prost(int64, tag="4")]
589    pub submitted_quantity: i64,
590}
591/// StreamPairStatus 스트리밍 응답 — 페어 상태 스냅샷
592#[allow(clippy::derive_partial_eq_without_eq)]
593#[derive(Clone, PartialEq, ::prost::Message)]
594pub struct PairStatusUpdate {
595    /// 리소스 이름 (pairs/{id})
596    #[prost(string, tag="1")]
597    pub pair: ::prost::alloc::string::String,
598    /// Base leg 상태
599    #[prost(message, optional, tag="2")]
600    pub base: ::core::option::Option<LegStatus>,
601    /// Counter leg 상태
602    #[prost(message, optional, tag="3")]
603    pub counter: ::core::option::Option<LegStatus>,
604    /// 스냅샷 시각
605    #[prost(message, optional, tag="4")]
606    pub updated_at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
607}
608// ============================================================================
609// Pair Statistics
610// ============================================================================
611
612/// GetPairStatistics 요청
613#[allow(clippy::derive_partial_eq_without_eq)]
614#[derive(Clone, PartialEq, ::prost::Message)]
615pub struct GetPairStatisticsRequest {
616    /// 리소스 이름 (pairs/{id})
617    #[prost(string, tag="1")]
618    pub pair: ::prost::alloc::string::String,
619}
620/// 페어 누적 통계 스냅샷 (인메모리 카운터 기반)
621#[allow(clippy::derive_partial_eq_without_eq)]
622#[derive(Clone, PartialEq, ::prost::Message)]
623pub struct PairStatistics {
624    /// 리소스 이름 (pairs/{id})
625    #[prost(string, tag="1")]
626    pub pair: ::prost::alloc::string::String,
627    /// base + counter 누적 발주 수량
628    #[prost(int64, tag="2")]
629    pub total_submitted: i64,
630    /// base + counter 누적 체결 수량
631    #[prost(int64, tag="3")]
632    pub total_filled: i64,
633    /// Spread 모드: 발주 성공 횟수 / PricingMakerTaker 모드: 사이클 수
634    #[prost(int64, tag="4")]
635    pub execution_count: i64,
636    /// 실현 손익 (milli-won). 현재 메모리 카운터 기반, Spread 모드는 0.
637    #[prost(int64, tag="5")]
638    pub realized_pnl: i64,
639}
640/// 주문 방향
641#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
642#[repr(i32)]
643pub enum PairSide {
644    Unspecified = 0,
645    /// 매수
646    Bid = 1,
647    /// 매도
648    Ask = 2,
649}
650impl PairSide {
651    /// String value of the enum field names used in the ProtoBuf definition.
652    ///
653    /// The values are not transformed in any way and thus are considered stable
654    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
655    pub fn as_str_name(&self) -> &'static str {
656        match self {
657            PairSide::Unspecified => "PAIR_SIDE_UNSPECIFIED",
658            PairSide::Bid => "PAIR_SIDE_BID",
659            PairSide::Ask => "PAIR_SIDE_ASK",
660        }
661    }
662    /// Creates an enum from field names used in the ProtoBuf definition.
663    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
664        match value {
665            "PAIR_SIDE_UNSPECIFIED" => Some(Self::Unspecified),
666            "PAIR_SIDE_BID" => Some(Self::Bid),
667            "PAIR_SIDE_ASK" => Some(Self::Ask),
668            _ => None,
669        }
670    }
671}
672/// 참조 가격 소스
673#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
674#[repr(i32)]
675pub enum PriceSource {
676    Unspecified = 0,
677    /// 중간가 (Bid1 + Ask1) / 2
678    MidPrice = 1,
679    /// 직전 체결가
680    LastPrice = 2,
681    /// 최우선 매수호가
682    BestBid = 3,
683    /// 최우선 매도호가
684    BestAsk = 4,
685}
686impl PriceSource {
687    /// String value of the enum field names used in the ProtoBuf definition.
688    ///
689    /// The values are not transformed in any way and thus are considered stable
690    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
691    pub fn as_str_name(&self) -> &'static str {
692        match self {
693            PriceSource::Unspecified => "PRICE_SOURCE_UNSPECIFIED",
694            PriceSource::MidPrice => "PRICE_SOURCE_MID_PRICE",
695            PriceSource::LastPrice => "PRICE_SOURCE_LAST_PRICE",
696            PriceSource::BestBid => "PRICE_SOURCE_BEST_BID",
697            PriceSource::BestAsk => "PRICE_SOURCE_BEST_ASK",
698        }
699    }
700    /// Creates an enum from field names used in the ProtoBuf definition.
701    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
702        match value {
703            "PRICE_SOURCE_UNSPECIFIED" => Some(Self::Unspecified),
704            "PRICE_SOURCE_MID_PRICE" => Some(Self::MidPrice),
705            "PRICE_SOURCE_LAST_PRICE" => Some(Self::LastPrice),
706            "PRICE_SOURCE_BEST_BID" => Some(Self::BestBid),
707            "PRICE_SOURCE_BEST_ASK" => Some(Self::BestAsk),
708            _ => None,
709        }
710    }
711}
712/// 스프레드 방향 (어느 쪽이 비쌀 때 트리거할지)
713#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
714#[repr(i32)]
715pub enum SpreadDirection {
716    Unspecified = 0,
717    /// Base가 비쌀 때만 트리거
718    BaseHigh = 1,
719    /// Counter가 비쌀 때만 트리거
720    CounterHigh = 2,
721    /// 양방향
722    Both = 3,
723}
724impl SpreadDirection {
725    /// String value of the enum field names used in the ProtoBuf definition.
726    ///
727    /// The values are not transformed in any way and thus are considered stable
728    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
729    pub fn as_str_name(&self) -> &'static str {
730        match self {
731            SpreadDirection::Unspecified => "SPREAD_DIRECTION_UNSPECIFIED",
732            SpreadDirection::BaseHigh => "SPREAD_DIRECTION_BASE_HIGH",
733            SpreadDirection::CounterHigh => "SPREAD_DIRECTION_COUNTER_HIGH",
734            SpreadDirection::Both => "SPREAD_DIRECTION_BOTH",
735        }
736    }
737    /// Creates an enum from field names used in the ProtoBuf definition.
738    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
739        match value {
740            "SPREAD_DIRECTION_UNSPECIFIED" => Some(Self::Unspecified),
741            "SPREAD_DIRECTION_BASE_HIGH" => Some(Self::BaseHigh),
742            "SPREAD_DIRECTION_COUNTER_HIGH" => Some(Self::CounterHigh),
743            "SPREAD_DIRECTION_BOTH" => Some(Self::Both),
744            _ => None,
745        }
746    }
747}
748/// 페어 주문 유형
749#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
750#[repr(i32)]
751pub enum PairOrderType {
752    Unspecified = 0,
753    /// 지정가
754    Limit = 1,
755    /// 시장가
756    Market = 2,
757    /// 공격적 지정가 (상대 최우선 호가 기반)
758    Aggressive = 3,
759}
760impl PairOrderType {
761    /// String value of the enum field names used in the ProtoBuf definition.
762    ///
763    /// The values are not transformed in any way and thus are considered stable
764    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
765    pub fn as_str_name(&self) -> &'static str {
766        match self {
767            PairOrderType::Unspecified => "PAIR_ORDER_TYPE_UNSPECIFIED",
768            PairOrderType::Limit => "PAIR_ORDER_TYPE_LIMIT",
769            PairOrderType::Market => "PAIR_ORDER_TYPE_MARKET",
770            PairOrderType::Aggressive => "PAIR_ORDER_TYPE_AGGRESSIVE",
771        }
772    }
773    /// Creates an enum from field names used in the ProtoBuf definition.
774    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
775        match value {
776            "PAIR_ORDER_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
777            "PAIR_ORDER_TYPE_LIMIT" => Some(Self::Limit),
778            "PAIR_ORDER_TYPE_MARKET" => Some(Self::Market),
779            "PAIR_ORDER_TYPE_AGGRESSIVE" => Some(Self::Aggressive),
780            _ => None,
781        }
782    }
783}
784// ============================================================================
785// Pair Status
786// ============================================================================
787
788/// Pair 상태
789#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
790#[repr(i32)]
791pub enum PairStatus {
792    Unspecified = 0,
793    /// 운영 중 (hot loop 동작)
794    Active = 1,
795    /// 일시 중지
796    Paused = 2,
797    /// 보관 (더 이상 사용 안 함)
798    Archived = 3,
799}
800impl PairStatus {
801    /// String value of the enum field names used in the ProtoBuf definition.
802    ///
803    /// The values are not transformed in any way and thus are considered stable
804    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
805    pub fn as_str_name(&self) -> &'static str {
806        match self {
807            PairStatus::Unspecified => "PAIR_STATUS_UNSPECIFIED",
808            PairStatus::Active => "PAIR_STATUS_ACTIVE",
809            PairStatus::Paused => "PAIR_STATUS_PAUSED",
810            PairStatus::Archived => "PAIR_STATUS_ARCHIVED",
811        }
812    }
813    /// Creates an enum from field names used in the ProtoBuf definition.
814    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
815        match value {
816            "PAIR_STATUS_UNSPECIFIED" => Some(Self::Unspecified),
817            "PAIR_STATUS_ACTIVE" => Some(Self::Active),
818            "PAIR_STATUS_PAUSED" => Some(Self::Paused),
819            "PAIR_STATUS_ARCHIVED" => Some(Self::Archived),
820            _ => None,
821        }
822    }
823}
824/// Pair leg 식별자
825#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
826#[repr(i32)]
827pub enum PairLeg {
828    Unspecified = 0,
829    Base = 1,
830    Counter = 2,
831}
832impl PairLeg {
833    /// String value of the enum field names used in the ProtoBuf definition.
834    ///
835    /// The values are not transformed in any way and thus are considered stable
836    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
837    pub fn as_str_name(&self) -> &'static str {
838        match self {
839            PairLeg::Unspecified => "PAIR_LEG_UNSPECIFIED",
840            PairLeg::Base => "PAIR_LEG_BASE",
841            PairLeg::Counter => "PAIR_LEG_COUNTER",
842        }
843    }
844    /// Creates an enum from field names used in the ProtoBuf definition.
845    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
846        match value {
847            "PAIR_LEG_UNSPECIFIED" => Some(Self::Unspecified),
848            "PAIR_LEG_BASE" => Some(Self::Base),
849            "PAIR_LEG_COUNTER" => Some(Self::Counter),
850            _ => None,
851        }
852    }
853}
854/// ETF NAV 계산 공식 종류
855/// (PdfNavHedge/PdfDecomposeHedge는 Pair 미지원 — 서버에서 거부됨)
856#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
857#[repr(i32)]
858pub enum EtfNavKind {
859    Unspecified = 0,
860    /// 지수 추종 헷지 프라이싱: (future + basis) * multiple + cash
861    IndexTrackingHedge = 1,
862    /// 선물 베이시스 기반: unit_delta * future / (prev_index + basis) + cash
863    FutureBasis = 2,
864    /// 레버리지/인버스 ETF용 선물 기반
865    LeverageFuture = 3,
866}
867impl EtfNavKind {
868    /// String value of the enum field names used in the ProtoBuf definition.
869    ///
870    /// The values are not transformed in any way and thus are considered stable
871    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
872    pub fn as_str_name(&self) -> &'static str {
873        match self {
874            EtfNavKind::Unspecified => "ETF_NAV_KIND_UNSPECIFIED",
875            EtfNavKind::IndexTrackingHedge => "ETF_NAV_KIND_INDEX_TRACKING_HEDGE",
876            EtfNavKind::FutureBasis => "ETF_NAV_KIND_FUTURE_BASIS",
877            EtfNavKind::LeverageFuture => "ETF_NAV_KIND_LEVERAGE_FUTURE",
878        }
879    }
880    /// Creates an enum from field names used in the ProtoBuf definition.
881    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
882        match value {
883            "ETF_NAV_KIND_UNSPECIFIED" => Some(Self::Unspecified),
884            "ETF_NAV_KIND_INDEX_TRACKING_HEDGE" => Some(Self::IndexTrackingHedge),
885            "ETF_NAV_KIND_FUTURE_BASIS" => Some(Self::FutureBasis),
886            "ETF_NAV_KIND_LEVERAGE_FUTURE" => Some(Self::LeverageFuture),
887            _ => None,
888        }
889    }
890}
891/// NAV 환산 방향
892#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
893#[repr(i32)]
894pub enum NavDirection {
895    Unspecified = 0,
896    /// pricer=ETF → maker=선물 가격 역산
897    Inverse = 1,
898    /// pricer=선물 → maker=ETF NAV forward 산출
899    Forward = 2,
900}
901impl NavDirection {
902    /// String value of the enum field names used in the ProtoBuf definition.
903    ///
904    /// The values are not transformed in any way and thus are considered stable
905    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
906    pub fn as_str_name(&self) -> &'static str {
907        match self {
908            NavDirection::Unspecified => "NAV_DIRECTION_UNSPECIFIED",
909            NavDirection::Inverse => "NAV_DIRECTION_INVERSE",
910            NavDirection::Forward => "NAV_DIRECTION_FORWARD",
911        }
912    }
913    /// Creates an enum from field names used in the ProtoBuf definition.
914    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
915        match value {
916            "NAV_DIRECTION_UNSPECIFIED" => Some(Self::Unspecified),
917            "NAV_DIRECTION_INVERSE" => Some(Self::Inverse),
918            "NAV_DIRECTION_FORWARD" => Some(Self::Forward),
919            _ => None,
920        }
921    }
922}
923/// 페어 실행 결과
924#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
925#[repr(i32)]
926pub enum PairExecutionOutcome {
927    Unspecified = 0,
928    /// 발주 성공
929    Submitted = 1,
930    /// 사전 검증 실패로 스킵
931    SkippedPreValidation = 2,
932    /// 쿨다운 중 스킵
933    SkippedCooldown = 3,
934    /// 사전 계산 없음으로 스킵
935    SkippedNoPrecomputed = 4,
936    /// 한쪽만 발주 성공 (부분 실패)
937    PartialFailure = 5,
938    /// 전체 실패
939    Failed = 6,
940}
941impl PairExecutionOutcome {
942    /// String value of the enum field names used in the ProtoBuf definition.
943    ///
944    /// The values are not transformed in any way and thus are considered stable
945    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
946    pub fn as_str_name(&self) -> &'static str {
947        match self {
948            PairExecutionOutcome::Unspecified => "PAIR_EXECUTION_OUTCOME_UNSPECIFIED",
949            PairExecutionOutcome::Submitted => "PAIR_EXECUTION_OUTCOME_SUBMITTED",
950            PairExecutionOutcome::SkippedPreValidation => "PAIR_EXECUTION_OUTCOME_SKIPPED_PRE_VALIDATION",
951            PairExecutionOutcome::SkippedCooldown => "PAIR_EXECUTION_OUTCOME_SKIPPED_COOLDOWN",
952            PairExecutionOutcome::SkippedNoPrecomputed => "PAIR_EXECUTION_OUTCOME_SKIPPED_NO_PRECOMPUTED",
953            PairExecutionOutcome::PartialFailure => "PAIR_EXECUTION_OUTCOME_PARTIAL_FAILURE",
954            PairExecutionOutcome::Failed => "PAIR_EXECUTION_OUTCOME_FAILED",
955        }
956    }
957    /// Creates an enum from field names used in the ProtoBuf definition.
958    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
959        match value {
960            "PAIR_EXECUTION_OUTCOME_UNSPECIFIED" => Some(Self::Unspecified),
961            "PAIR_EXECUTION_OUTCOME_SUBMITTED" => Some(Self::Submitted),
962            "PAIR_EXECUTION_OUTCOME_SKIPPED_PRE_VALIDATION" => Some(Self::SkippedPreValidation),
963            "PAIR_EXECUTION_OUTCOME_SKIPPED_COOLDOWN" => Some(Self::SkippedCooldown),
964            "PAIR_EXECUTION_OUTCOME_SKIPPED_NO_PRECOMPUTED" => Some(Self::SkippedNoPrecomputed),
965            "PAIR_EXECUTION_OUTCOME_PARTIAL_FAILURE" => Some(Self::PartialFailure),
966            "PAIR_EXECUTION_OUTCOME_FAILED" => Some(Self::Failed),
967            _ => None,
968        }
969    }
970}
971/// Maker-Taker 이벤트 유형
972#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
973#[repr(i32)]
974pub enum MakerTakerEventType {
975    Unspecified = 0,
976    /// maker 신규 발주 (FEP submit 직후)
977    MakerSubmitted = 1,
978    /// maker 정정 (가격/수량 변경)
979    MakerAmended = 2,
980    /// maker 부분/완전 체결
981    MakerFilled = 3,
982    /// maker 주문 reject
983    MakerRejected = 4,
984    /// maker 주문 거래소 auto-cancel
985    MakerCancelled = 5,
986    /// taker 헷지 주문 발주
987    TakerSubmitted = 6,
988    /// taker 헷지 체결
989    TakerFilled = 7,
990    /// taker 헷지 reject (수동 개입 필요)
991    TakerRejected = 8,
992}
993impl MakerTakerEventType {
994    /// String value of the enum field names used in the ProtoBuf definition.
995    ///
996    /// The values are not transformed in any way and thus are considered stable
997    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
998    pub fn as_str_name(&self) -> &'static str {
999        match self {
1000            MakerTakerEventType::Unspecified => "MAKER_TAKER_EVENT_TYPE_UNSPECIFIED",
1001            MakerTakerEventType::MakerSubmitted => "MAKER_TAKER_EVENT_TYPE_MAKER_SUBMITTED",
1002            MakerTakerEventType::MakerAmended => "MAKER_TAKER_EVENT_TYPE_MAKER_AMENDED",
1003            MakerTakerEventType::MakerFilled => "MAKER_TAKER_EVENT_TYPE_MAKER_FILLED",
1004            MakerTakerEventType::MakerRejected => "MAKER_TAKER_EVENT_TYPE_MAKER_REJECTED",
1005            MakerTakerEventType::MakerCancelled => "MAKER_TAKER_EVENT_TYPE_MAKER_CANCELLED",
1006            MakerTakerEventType::TakerSubmitted => "MAKER_TAKER_EVENT_TYPE_TAKER_SUBMITTED",
1007            MakerTakerEventType::TakerFilled => "MAKER_TAKER_EVENT_TYPE_TAKER_FILLED",
1008            MakerTakerEventType::TakerRejected => "MAKER_TAKER_EVENT_TYPE_TAKER_REJECTED",
1009        }
1010    }
1011    /// Creates an enum from field names used in the ProtoBuf definition.
1012    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1013        match value {
1014            "MAKER_TAKER_EVENT_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
1015            "MAKER_TAKER_EVENT_TYPE_MAKER_SUBMITTED" => Some(Self::MakerSubmitted),
1016            "MAKER_TAKER_EVENT_TYPE_MAKER_AMENDED" => Some(Self::MakerAmended),
1017            "MAKER_TAKER_EVENT_TYPE_MAKER_FILLED" => Some(Self::MakerFilled),
1018            "MAKER_TAKER_EVENT_TYPE_MAKER_REJECTED" => Some(Self::MakerRejected),
1019            "MAKER_TAKER_EVENT_TYPE_MAKER_CANCELLED" => Some(Self::MakerCancelled),
1020            "MAKER_TAKER_EVENT_TYPE_TAKER_SUBMITTED" => Some(Self::TakerSubmitted),
1021            "MAKER_TAKER_EVENT_TYPE_TAKER_FILLED" => Some(Self::TakerFilled),
1022            "MAKER_TAKER_EVENT_TYPE_TAKER_REJECTED" => Some(Self::TakerRejected),
1023            _ => None,
1024        }
1025    }
1026}
1027include!("kdo.v1.pair.tonic.rs");
1028include!("kdo.v1.pair.serde.rs");
1029// @@protoc_insertion_point(module)