use std::collections::BTreeMap;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct Activity {
pub id: String,
pub activity_type: String,
pub transaction_time: Option<String>,
#[serde(rename = "type")]
pub r#type: Option<String>,
#[serde(
default,
deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number",
serialize_with = "alpaca_core::decimal::string_contract::serialize_option_decimal"
)]
pub price: Option<Decimal>,
#[serde(
default,
deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number",
serialize_with = "alpaca_core::decimal::string_contract::serialize_option_decimal"
)]
pub qty: Option<Decimal>,
pub side: Option<String>,
pub symbol: Option<String>,
#[serde(
default,
deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number",
serialize_with = "alpaca_core::decimal::string_contract::serialize_option_decimal"
)]
pub leaves_qty: Option<Decimal>,
pub order_id: Option<String>,
#[serde(
default,
deserialize_with = "alpaca_core::decimal::deserialize_option_decimal_from_string_or_number",
serialize_with = "alpaca_core::decimal::string_contract::serialize_option_decimal"
)]
pub cum_qty: Option<Decimal>,
pub order_status: Option<String>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
pub extra: BTreeMap<String, serde_json::Value>,
}