// @generated
// This file is @generated by prost-build.
// ========== Resource Messages ==========

/// 포트폴리오 정보
/// P&L(손익) 집계 단위
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Portfolio {
    /// 포트폴리오 리소스 이름 (예: portfolios/1)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
    /// 포트폴리오 ID
    #[prost(int32, tag="2")]
    pub id: i32,
    /// 포트폴리오 이름 (고유)
    #[prost(string, tag="3")]
    pub display_name: ::prost::alloc::string::String,
    /// 포트폴리오 설명
    #[prost(string, tag="4")]
    pub description: ::prost::alloc::string::String,
    /// 활성화 여부
    #[prost(bool, tag="5")]
    pub is_active: bool,
    /// 생성 시간
    #[prost(message, optional, tag="6")]
    pub create_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
    /// 수정 시간
    #[prost(message, optional, tag="7")]
    pub update_time: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
/// 포트폴리오 P&L 집계 결과
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PortfolioPnL {
    /// 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub portfolio: ::prost::alloc::string::String,
    /// 포트폴리오 ID
    #[prost(int32, tag="2")]
    pub portfolio_id: i32,
    /// 포트폴리오 이름
    #[prost(string, tag="3")]
    pub portfolio_name: ::prost::alloc::string::String,
    /// 실현 손익 (원)
    #[prost(int64, tag="4")]
    pub realized_pnl: i64,
    /// 미실현 손익 (원)
    #[prost(int64, tag="5")]
    pub unrealized_pnl: i64,
    /// 거래 비용 (원)
    #[prost(int64, tag="6")]
    pub trading_cost: i64,
    /// 순손익 (realized + unrealized - trading_cost)
    #[prost(int64, tag="7")]
    pub net_pnl: i64,
    /// 하위 펀드 수
    #[prost(int32, tag="8")]
    pub fund_count: i32,
    /// 하위 헷지그룹 수
    #[prost(int32, tag="9")]
    pub hedge_group_count: i32,
    /// 종목별 P&L 상세
    #[prost(message, repeated, tag="10")]
    pub symbol_pnls: ::prost::alloc::vec::Vec<SymbolPnLDetail>,
    /// 스냅샷 시간
    #[prost(message, optional, tag="11")]
    pub timestamp: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
/// 종목별 P&L 상세
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SymbolPnLDetail {
    /// 종목 코드
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 보유 수량
    #[prost(double, tag="2")]
    pub quantity: f64,
    /// 평균 진입가
    #[prost(double, tag="3")]
    pub average_entry_price: f64,
    /// 현재가
    #[prost(double, tag="4")]
    pub current_price: f64,
    /// 미실현 손익
    #[prost(int64, tag="5")]
    pub unrealized_pnl: i64,
    /// 실현 손익
    #[prost(int64, tag="6")]
    pub realized_pnl: i64,
    /// 거래 비용
    #[prost(int64, tag="7")]
    pub trading_cost: i64,
}
/// 포트폴리오 Exposure (실시간 포지션 및 손익 추적)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PortfolioExposure {
    /// 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub portfolio: ::prost::alloc::string::String,
    /// 포트폴리오 ID
    #[prost(int32, tag="2")]
    pub portfolio_id: i32,
    /// 심볼별 통합 포지션 (모든 Fund 합산)
    #[prost(message, repeated, tag="3")]
    pub positions: ::prost::alloc::vec::Vec<SymbolPosition>,
    /// Fund별 심볼 포지션 (상세 추적용)
    #[prost(message, repeated, tag="4")]
    pub fund_positions: ::prost::alloc::vec::Vec<FundSymbolPosition>,
    /// 실현 손익 (당일)
    #[prost(int64, tag="5")]
    pub realized_pnl: i64,
    /// 미실현 손익 (현재가 기준)
    #[prost(int64, tag="6")]
    pub unrealized_pnl: i64,
    /// 거래 비용 (수수료 등)
    #[prost(int64, tag="7")]
    pub trading_cost: i64,
    /// 순손익 (realized + unrealized - trading_cost)
    #[prost(int64, tag="8")]
    pub net_pnl: i64,
    /// 전체 net exposure 수량
    #[prost(int64, tag="9")]
    pub total_net_quantity: i64,
    /// 전체 exposure 금액
    #[prost(int64, tag="10")]
    pub total_exposure_amount: i64,
    /// Net Exposures (Hedge 변환 후 상계된 결과)
    /// positions를 nettings 설정에 따라 분해/변환한 결과
    #[prost(message, optional, tag="11")]
    pub net_exposures: ::core::option::Option<NetExposures>,
    /// 마지막 업데이트 시간
    #[prost(message, optional, tag="15")]
    pub last_update: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
/// 심볼별 통합 포지션
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SymbolPosition {
    /// 종목 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 매수 수량 (>= 0)
    #[prost(int64, tag="7")]
    pub bid_quantity: i64,
    /// 매도 수량 (>= 0)
    #[prost(int64, tag="8")]
    pub ask_quantity: i64,
    /// 순수량 (bid - ask, 모든 Fund 합산)
    #[prost(int64, tag="2")]
    pub net_quantity: i64,
    /// 매수 평균단가
    #[prost(double, tag="9")]
    pub bid_average_cost: f64,
    /// 매도 평균단가
    #[prost(double, tag="10")]
    pub ask_average_cost: f64,
    /// 현재가
    #[prost(double, tag="4")]
    pub current_price: f64,
    /// 미실현 손익
    #[prost(int64, tag="5")]
    pub unrealized_pnl: i64,
    /// 익스포저 금액 (net_quantity * current_price)
    #[prost(int64, tag="6")]
    pub exposure_amount: i64,
    /// 실현 손익
    #[prost(int64, tag="11")]
    pub realized_pnl: i64,
}
/// Fund별 심볼 포지션 (상세)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct FundSymbolPosition {
    /// 펀드 코드
    #[prost(string, tag="1")]
    pub fund_code: ::prost::alloc::string::String,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 매수 수량 (>= 0)
    #[prost(int64, tag="7")]
    pub bid_quantity: i64,
    /// 매도 수량 (>= 0)
    #[prost(int64, tag="8")]
    pub ask_quantity: i64,
    /// 매수 평균단가
    #[prost(double, tag="9")]
    pub bid_average_cost: f64,
    /// 매도 평균단가
    #[prost(double, tag="10")]
    pub ask_average_cost: f64,
    /// 현재가
    #[prost(double, tag="5")]
    pub current_price: f64,
    /// 미실현 손익
    #[prost(int64, tag="6")]
    pub unrealized_pnl: i64,
    /// 실현 손익
    #[prost(int64, tag="11")]
    pub realized_pnl: i64,
}
/// Net Exposures 집계 구조체 (Hedge 변환 후 상계된 결과)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetExposures {
    /// 심볼별 Net Exposure
    #[prost(message, repeated, tag="1")]
    pub exposures: ::prost::alloc::vec::Vec<NetExposure>,
    /// 전체 수량 합계
    #[prost(float, tag="2")]
    pub total_quantity: f32,
    /// 전체 익스포저 금액
    #[prost(int64, tag="3")]
    pub total_exposure: i64,
}
/// Net Exposure (변환된 포지션)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NetExposure {
    /// 종목 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 누적 수량 (분해 후 합산, 소수점 2자리)
    #[prost(double, tag="2")]
    pub net_quantity: f64,
    /// 현재가
    #[prost(double, tag="3")]
    pub current_price: f64,
    /// 익스포저 금액 (net_quantity * current_price)
    #[prost(int64, tag="4")]
    pub exposure_amount: i64,
}
/// HedgeGroup 요약 정보 (포트폴리오 컨텍스트)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HedgeGroupSummary {
    /// 헷지그룹 ID
    #[prost(int32, tag="1")]
    pub id: i32,
    /// 헷지그룹 이름
    #[prost(string, tag="2")]
    pub name: ::prost::alloc::string::String,
    /// 헷지 방식
    #[prost(string, tag="3")]
    pub hedge_method: ::prost::alloc::string::String,
    /// 트리거 조건
    #[prost(string, tag="4")]
    pub trigger_condition: ::prost::alloc::string::String,
    /// 하위 펀드 수
    #[prost(int32, tag="5")]
    pub fund_count: i32,
    /// 활성화 여부
    #[prost(bool, tag="6")]
    pub is_active: bool,
}
/// Fund 요약 정보 (포트폴리오 컨텍스트)
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct FundSummary {
    /// 펀드 코드
    #[prost(string, tag="1")]
    pub code: ::prost::alloc::string::String,
    /// 펀드 이름
    #[prost(string, tag="2")]
    pub name: ::prost::alloc::string::String,
    /// 속한 헷지그룹 ID
    #[prost(int32, tag="3")]
    pub hedge_group_id: i32,
    /// 속한 헷지그룹 이름
    #[prost(string, tag="4")]
    pub hedge_group_name: ::prost::alloc::string::String,
}
// ========== Exposure Snapshot Messages ==========

/// 특정 시점의 포지션 스냅샷
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ExposureSnapshot {
    /// 스냅샷 ID
    #[prost(string, tag="1")]
    pub snapshot_id: ::prost::alloc::string::String,
    /// 포트폴리오 ID
    #[prost(int32, tag="2")]
    pub portfolio_id: i32,
    /// 스냅샷 이름 (사용자 지정, optional)
    #[prost(string, optional, tag="3")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
    /// 심볼별 통합 포지션 (모든 Fund 합산)
    #[prost(message, repeated, tag="4")]
    pub positions: ::prost::alloc::vec::Vec<SnapshotSymbolPosition>,
    /// Fund별 심볼 포지션
    #[prost(message, repeated, tag="5")]
    pub fund_positions: ::prost::alloc::vec::Vec<SnapshotFundSymbolPosition>,
    /// 스냅샷 생성 시간
    #[prost(message, optional, tag="6")]
    pub created_at: ::core::option::Option<super::super::super::google::protobuf::Timestamp>,
}
/// 스냅샷에 저장되는 심볼별 포지션
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SnapshotSymbolPosition {
    /// 종목 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 매수 수량 (>= 0)
    #[prost(int64, tag="2")]
    pub bid_quantity: i64,
    /// 매도 수량 (>= 0)
    #[prost(int64, tag="3")]
    pub ask_quantity: i64,
    /// 순수량 (bid - ask)
    #[prost(int64, tag="4")]
    pub net_quantity: i64,
    /// 매수 평균단가
    #[prost(double, tag="5")]
    pub bid_average_cost: f64,
    /// 매도 평균단가
    #[prost(double, tag="6")]
    pub ask_average_cost: f64,
}
/// 스냅샷에 저장되는 Fund별 심볼 포지션
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct SnapshotFundSymbolPosition {
    /// 펀드 코드
    #[prost(string, tag="1")]
    pub fund_code: ::prost::alloc::string::String,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 매수 수량 (>= 0)
    #[prost(int64, tag="3")]
    pub bid_quantity: i64,
    /// 매도 수량 (>= 0)
    #[prost(int64, tag="4")]
    pub ask_quantity: i64,
    /// 순수량 (bid - ask)
    #[prost(int64, tag="5")]
    pub net_quantity: i64,
    /// 매수 평균단가
    #[prost(double, tag="6")]
    pub bid_average_cost: f64,
    /// 매도 평균단가
    #[prost(double, tag="7")]
    pub ask_average_cost: f64,
}
/// 스냅샷 이후 심볼별 포지션 변화
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PositionChange {
    /// 종목 심볼
    #[prost(string, tag="1")]
    pub symbol: ::prost::alloc::string::String,
    /// 스냅샷 시점 매수 수량
    #[prost(int64, tag="2")]
    pub snapshot_bid_quantity: i64,
    /// 스냅샷 시점 매도 수량
    #[prost(int64, tag="3")]
    pub snapshot_ask_quantity: i64,
    /// 스냅샷 시점 순수량
    #[prost(int64, tag="4")]
    pub snapshot_net_quantity: i64,
    /// 스냅샷 시점 매수 평균단가
    #[prost(double, tag="5")]
    pub snapshot_bid_average_cost: f64,
    /// 스냅샷 시점 매도 평균단가
    #[prost(double, tag="6")]
    pub snapshot_ask_average_cost: f64,
    /// 현재 매수 수량
    #[prost(int64, tag="7")]
    pub current_bid_quantity: i64,
    /// 현재 매도 수량
    #[prost(int64, tag="8")]
    pub current_ask_quantity: i64,
    /// 현재 순수량
    #[prost(int64, tag="9")]
    pub current_net_quantity: i64,
    /// 현재 매수 평균단가
    #[prost(double, tag="10")]
    pub current_bid_average_cost: f64,
    /// 현재 매도 평균단가
    #[prost(double, tag="11")]
    pub current_ask_average_cost: f64,
    /// 매수 수량 변화 (current - snapshot)
    #[prost(int64, tag="12")]
    pub bid_quantity_change: i64,
    /// 매도 수량 변화 (current - snapshot)
    #[prost(int64, tag="13")]
    pub ask_quantity_change: i64,
    /// 순수량 변화 (current - snapshot)
    #[prost(int64, tag="14")]
    pub net_quantity_change: i64,
    /// 매수 평균단가 변화
    #[prost(double, tag="15")]
    pub bid_average_cost_change: f64,
    /// 매도 평균단가 변화
    #[prost(double, tag="16")]
    pub ask_average_cost_change: f64,
}
/// 스냅샷 이후 Fund별 심볼 포지션 변화
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct FundPositionChange {
    /// 펀드 코드
    #[prost(string, tag="1")]
    pub fund_code: ::prost::alloc::string::String,
    /// 종목 심볼
    #[prost(string, tag="2")]
    pub symbol: ::prost::alloc::string::String,
    /// 스냅샷 시점 매수 수량
    #[prost(int64, tag="3")]
    pub snapshot_bid_quantity: i64,
    /// 스냅샷 시점 매도 수량
    #[prost(int64, tag="4")]
    pub snapshot_ask_quantity: i64,
    /// 스냅샷 시점 순수량
    #[prost(int64, tag="5")]
    pub snapshot_net_quantity: i64,
    /// 스냅샷 시점 매수 평균단가
    #[prost(double, tag="6")]
    pub snapshot_bid_average_cost: f64,
    /// 스냅샷 시점 매도 평균단가
    #[prost(double, tag="7")]
    pub snapshot_ask_average_cost: f64,
    /// 현재 매수 수량
    #[prost(int64, tag="8")]
    pub current_bid_quantity: i64,
    /// 현재 매도 수량
    #[prost(int64, tag="9")]
    pub current_ask_quantity: i64,
    /// 현재 순수량
    #[prost(int64, tag="10")]
    pub current_net_quantity: i64,
    /// 현재 매수 평균단가
    #[prost(double, tag="11")]
    pub current_bid_average_cost: f64,
    /// 현재 매도 평균단가
    #[prost(double, tag="12")]
    pub current_ask_average_cost: f64,
    /// 매수 수량 변화
    #[prost(int64, tag="13")]
    pub bid_quantity_change: i64,
    /// 매도 수량 변화
    #[prost(int64, tag="14")]
    pub ask_quantity_change: i64,
    /// 순수량 변화
    #[prost(int64, tag="15")]
    pub net_quantity_change: i64,
    /// 매수 평균단가 변화
    #[prost(double, tag="16")]
    pub bid_average_cost_change: f64,
    /// 매도 평균단가 변화
    #[prost(double, tag="17")]
    pub ask_average_cost_change: f64,
}
/// 스냅샷 이후 전체 포지션 변화 요약
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ExposureChanges {
    /// 기준 스냅샷
    #[prost(message, optional, tag="1")]
    pub snapshot: ::core::option::Option<ExposureSnapshot>,
    /// 심볼별 포지션 변화 목록
    #[prost(message, repeated, tag="2")]
    pub position_changes: ::prost::alloc::vec::Vec<PositionChange>,
    /// Fund별 심볼 포지션 변화 목록
    #[prost(message, repeated, tag="3")]
    pub fund_position_changes: ::prost::alloc::vec::Vec<FundPositionChange>,
}
// ========== Request/Response Messages ==========

/// GetPortfolio 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetPortfolioRequest {
    /// 포트폴리오 리소스 이름 (예: portfolios/1)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// ListPortfolios 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfoliosRequest {
    /// 페이지 크기 (optional)
    #[prost(int32, optional, tag="1")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (optional, for pagination)
    #[prost(string, optional, tag="2")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
    /// 필터
    /// Available filters:
    /// * is_active
    ///    * `equal` (true/false)
    /// * display_name
    ///    * `equal`, `contains`
    ///
    /// Examples:
    /// * filter=is_active=true
    /// * filter=display_name:"ELS"
    #[prost(string, tag="3")]
    pub filter: ::prost::alloc::string::String,
}
/// ListPortfolios 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfoliosResponse {
    /// 포트폴리오 목록
    #[prost(message, repeated, tag="1")]
    pub portfolios: ::prost::alloc::vec::Vec<Portfolio>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// CreatePortfolio 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreatePortfolioRequest {
    /// 생성할 포트폴리오 정보
    #[prost(message, optional, tag="1")]
    pub portfolio: ::core::option::Option<Portfolio>,
}
/// UpdatePortfolio 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct UpdatePortfolioRequest {
    /// 수정할 포트폴리오 정보
    #[prost(message, optional, tag="1")]
    pub portfolio: ::core::option::Option<Portfolio>,
    /// 수정할 필드 마스크
    #[prost(message, optional, tag="2")]
    pub update_mask: ::core::option::Option<super::super::super::google::protobuf::FieldMask>,
}
/// DeletePortfolio 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeletePortfolioRequest {
    /// 삭제할 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// GetPortfolioPnL 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetPortfolioPnLRequest {
    /// 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// GetPortfolioExposure 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetPortfolioExposureRequest {
    /// 포트폴리오 리소스 이름 (예: portfolios/1)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// ListPortfolioHedgeGroups 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfolioHedgeGroupsRequest {
    /// 부모 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub parent: ::prost::alloc::string::String,
    /// 페이지 크기 (optional)
    #[prost(int32, optional, tag="2")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (optional)
    #[prost(string, optional, tag="3")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
}
/// ListPortfolioHedgeGroups 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfolioHedgeGroupsResponse {
    /// 헷지그룹 목록
    #[prost(message, repeated, tag="1")]
    pub hedge_groups: ::prost::alloc::vec::Vec<HedgeGroupSummary>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// ListPortfolioFunds 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfolioFundsRequest {
    /// 부모 포트폴리오 리소스 이름
    #[prost(string, tag="1")]
    pub parent: ::prost::alloc::string::String,
    /// 페이지 크기 (optional)
    #[prost(int32, optional, tag="2")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (optional)
    #[prost(string, optional, tag="3")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
}
/// ListPortfolioFunds 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListPortfolioFundsResponse {
    /// 펀드 목록
    #[prost(message, repeated, tag="1")]
    pub funds: ::prost::alloc::vec::Vec<FundSummary>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// CreateExposureSnapshot 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct CreateExposureSnapshotRequest {
    /// 부모 포트폴리오 리소스 이름 (예: portfolios/1)
    #[prost(string, tag="1")]
    pub parent: ::prost::alloc::string::String,
    /// 스냅샷 이름 (optional)
    #[prost(string, optional, tag="2")]
    pub name: ::core::option::Option<::prost::alloc::string::String>,
}
/// GetExposureSnapshot 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetExposureSnapshotRequest {
    /// 스냅샷 리소스 이름 (예: portfolios/1/exposure_snapshots/snap-uuid)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// ListExposureSnapshots 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListExposureSnapshotsRequest {
    /// 부모 포트폴리오 리소스 이름 (예: portfolios/1)
    #[prost(string, tag="1")]
    pub parent: ::prost::alloc::string::String,
    /// 페이지 크기 (optional)
    #[prost(int32, optional, tag="2")]
    pub page_size: ::core::option::Option<i32>,
    /// 페이지 토큰 (optional)
    #[prost(string, optional, tag="3")]
    pub page_token: ::core::option::Option<::prost::alloc::string::String>,
}
/// ListExposureSnapshots 응답
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ListExposureSnapshotsResponse {
    /// 스냅샷 목록
    #[prost(message, repeated, tag="1")]
    pub snapshots: ::prost::alloc::vec::Vec<ExposureSnapshot>,
    /// 다음 페이지 토큰
    #[prost(string, tag="2")]
    pub next_page_token: ::prost::alloc::string::String,
}
/// GetExposureChanges 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GetExposureChangesRequest {
    /// 스냅샷 리소스 이름 (예: portfolios/1/exposure_snapshots/snap-uuid)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
/// DeleteExposureSnapshot 요청
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DeleteExposureSnapshotRequest {
    /// 삭제할 스냅샷 리소스 이름 (예: portfolios/1/exposure_snapshots/snap-uuid)
    #[prost(string, tag="1")]
    pub name: ::prost::alloc::string::String,
}
include!("kdo.v1.portfolio.tonic.rs");
include!("kdo.v1.portfolio.serde.rs");
// @@protoc_insertion_point(module)