use std::sync::Arc;
use crate::date::Date;
use crate::decimal::Decimal;
use super::transaction::Transaction;
#[derive(Debug, Clone)]
pub enum Entry {
Transaction(Transaction),
Price(Price),
Commodity {
symbol: String,
aliases: Vec<String>,
precision: Option<usize>,
},
Account(String),
FxGainAccount(String),
FxLossAccount(String),
CtaGainAccount(String),
CtaLossAccount(String),
Comment(String),
AutoRule(AutoRule),
}
#[derive(Debug, Clone)]
pub struct AutoRule {
pub pattern: AutoPattern,
pub postings: Vec<AutoPosting>,
}
#[derive(Debug, Clone)]
pub enum AutoPattern {
Prefix(String),
Suffix(String),
Exact(String),
Contains(String),
}
impl AutoPattern {
pub fn matches(&self, account: &str) -> bool {
match self {
AutoPattern::Prefix(s) => account.starts_with(s.as_str()),
AutoPattern::Suffix(s) => account.ends_with(s.as_str()),
AutoPattern::Exact(s) => account == s,
AutoPattern::Contains(s) => account.contains(s.as_str()),
}
}
}
#[derive(Debug, Clone)]
pub struct AutoPosting {
pub account: String,
pub multiplier: crate::decimal::Decimal,
pub is_virtual: bool,
pub balanced: bool,
}
#[derive(Debug, Clone)]
pub struct Price {
pub date: Date,
pub base: Arc<str>,
pub quote: Arc<str>,
pub rate: Decimal,
}