alpacars 0.1.2

Async Rust SDK for Alpaca Markets API
Documentation
use crate::broker::enums::*;
use crate::trading::enums::AccountStatus;
use crate::trading::models::Order;
use chrono::{DateTime, NaiveDate, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Contact {
    pub email_address: String,
    pub phone_number: Option<String>,
    pub street_address: Vec<String>,
    pub unit: Option<String>,
    pub city: Option<String>,
    pub state: Option<String>,
    pub postal_code: Option<String>,
    pub country: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Identity {
    pub given_name: Option<String>,
    pub middle_name: Option<String>,
    pub family_name: Option<String>,
    pub date_of_birth: Option<NaiveDate>,
    pub tax_id: Option<String>,
    pub tax_id_type: Option<TaxIdType>,
    pub country_of_citizenship: Option<String>,
    pub country_of_birth: Option<String>,
    pub country_of_tax_residence: Option<String>,
    pub visa_type: Option<VisaType>,
    pub visa_expiration_date: Option<NaiveDate>,
    pub date_of_departure_from_usa: Option<NaiveDate>,
    pub permanent_resident: Option<bool>,
    pub funding_source: Option<Vec<FundingSource>>,
    pub annual_income_min: Option<String>,
    pub annual_income_max: Option<String>,
    pub liquid_net_worth_min: Option<String>,
    pub liquid_net_worth_max: Option<String>,
    pub total_net_worth_min: Option<String>,
    pub total_net_worth_max: Option<String>,
    pub employer_name: Option<String>,
    pub employer_address: Option<String>,
    pub employment_position: Option<String>,
    pub employment_status: Option<EmploymentStatus>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Disclosures {
    pub is_control_person: bool,
    pub is_affiliated_exchange_or_finra: bool,
    pub is_politically_exposed: bool,
    pub immediate_family_exposed: bool,
    pub is_affiliated_exchange_or_iiroc: Option<bool>,
    pub context: Option<Vec<serde_json::Value>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Agreement {
    pub agreement: AgreementType,
    pub signed_at: Option<DateTime<Utc>>,
    pub ip_address: Option<String>,
    pub revision: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrustedContact {
    pub given_name: Option<String>,
    pub family_name: Option<String>,
    pub email_address: Option<String>,
    pub phone_number: Option<String>,
    pub city: Option<String>,
    pub state: Option<String>,
    pub postal_code: Option<String>,
    pub country: Option<String>,
    pub street_address: Option<Vec<String>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountDocument {
    pub document_type: Option<DocumentType>,
    pub document_sub_type: Option<String>,
    pub content: Option<String>,
    pub mime_type: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Account {
    pub id: Uuid,
    pub account_number: Option<String>,
    pub status: AccountStatus,
    pub crypto_status: Option<AccountStatus>,
    pub kyc_results: Option<serde_json::Value>,
    pub currency: Option<String>,
    pub last_equity: Option<String>,
    pub created_at: Option<DateTime<Utc>>,
    pub contact: Option<Contact>,
    pub identity: Option<Identity>,
    pub disclosures: Option<Disclosures>,
    pub agreements: Option<Vec<Agreement>>,
    pub documents: Option<Vec<AccountDocument>>,
    pub trusted_contact: Option<TrustedContact>,
    pub enabled_assets: Option<Vec<String>>,
    pub account_type: Option<AccountType>,
    pub trading_configurations: Option<serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TradeDocument {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub document_type: Option<TradeDocumentType>,
    pub document_sub_type: Option<String>,
    pub name: Option<String>,
    pub date: Option<NaiveDate>,
    pub url: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ACHRelationship {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub status: ACHRelationshipStatus,
    pub account_owner_name: Option<String>,
    pub bank_account_type: Option<BankAccountType>,
    pub bank_account_number: Option<String>,
    pub bank_routing_number: Option<String>,
    pub nickname: Option<String>,
    pub processor_token: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Bank {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub status: Option<String>,
    pub name: Option<String>,
    pub account_number: Option<String>,
    pub routing_number: Option<String>,
    pub swift_code: Option<String>,
    pub country: Option<String>,
    pub state_province: Option<String>,
    pub postal_code: Option<String>,
    pub city: Option<String>,
    pub street_address: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Transfer {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub expires_at: Option<DateTime<Utc>>,
    pub relationship_id: Option<Uuid>,
    pub bank_id: Option<Uuid>,
    pub r#type: Option<TransferType>,
    pub status: Option<TransferStatus>,
    pub amount: Option<String>,
    pub direction: Option<TransferDirection>,
    pub reason: Option<String>,
    pub hold_until: Option<DateTime<Utc>>,
    pub additional_information: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Journal {
    pub id: Uuid,
    pub to_account: Option<Uuid>,
    pub from_account: Option<Uuid>,
    pub entry_type: Option<JournalEntryType>,
    pub symbol: Option<String>,
    pub qty: Option<String>,
    pub price: Option<String>,
    pub status: Option<JournalStatus>,
    pub settle_date: Option<NaiveDate>,
    pub system_date: Option<NaiveDate>,
    pub net_amount: Option<String>,
    pub description: Option<String>,
    pub currency: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchJournalEntry {
    pub to_account: Uuid,
    pub amount: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchJournalResponse {
    pub journals: Vec<Journal>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PortfolioAsset {
    pub symbol: String,
    pub percent: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Portfolio {
    pub id: Uuid,
    pub name: Option<String>,
    pub description: Option<String>,
    pub status: Option<PortfolioStatus>,
    pub cooldown_days: Option<u32>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub assets: Option<Vec<PortfolioAsset>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub portfolio_id: Option<Uuid>,
    pub status: Option<String>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RebalancingRun {
    pub id: Uuid,
    pub portfolio_id: Option<Uuid>,
    pub status: Option<String>,
    pub reason: Option<String>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub completed_at: Option<DateTime<Utc>>,
    pub orders: Option<Vec<Order>>,
    pub failed_orders: Option<Vec<serde_json::Value>>,
    pub skipped_orders: Option<Vec<serde_json::Value>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CIPInfo {
    pub id: Uuid,
    pub account_id: Option<Uuid>,
    pub provider_name: Option<Vec<String>>,
    pub created_at: Option<DateTime<Utc>>,
    pub updated_at: Option<DateTime<Utc>>,
    pub kyc: Option<serde_json::Value>,
    pub document: Option<serde_json::Value>,
    pub photo: Option<serde_json::Value>,
    pub identity: Option<serde_json::Value>,
    pub watchlist: Option<serde_json::Value>,
}

pub use crate::trading::models::{
    AccountActivity, Asset, Calendar, Clock, ClosePositionResponse, NonTradeActivity,
    OptionContract, Position, TradeActivity, TradeAccount, Watchlist,
};
pub use crate::trading::requests::{
    CreateWatchlistRequest, GetAssetsRequest, GetCalendarRequest, UpdateWatchlistRequest,
};