diff options
Diffstat (limited to 'src/types.rs')
| -rw-r--r-- | src/types.rs | 93 |
1 files changed, 86 insertions, 7 deletions
diff --git a/src/types.rs b/src/types.rs index 2e83ea2..98af390 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,5 +1,34 @@ use chrono::{DateTime, Utc}; +use ulid::Ulid; +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct AccountId(Ulid); + +impl AccountId { + pub fn as_ulid(&self) -> Ulid { + self.0 + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct PostingId(Ulid); + +impl PostingId { + pub fn as_ulid(&self) -> Ulid { + self.0 + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct JournalEntryId(Ulid); + +impl JournalEntryId { + pub fn as_ulid(&self) -> Ulid { + self.0 + } +} + +#[derive(PartialEq)] pub enum AccountType { Asset, Liability, @@ -9,26 +38,76 @@ pub enum AccountType { } pub struct Account { - pub account_id: u32, + account_id: AccountId, pub account_type: AccountType, pub name: String, - pub description: String, + pub description: String +} + +pub struct NewAccount { + pub account_type: AccountType, + pub name: String, + pub description: String +} + +impl NewAccount { + fn new(account_type: AccountType, name: impl Into<String>, description: impl Into<String>) -> NewAccount { + NewAccount { + account_type, + name: name.into(), + description: description.into() + } + } } #[derive(PartialEq)] -pub enum TransactionType { +pub enum PostingType { Debit, Credit } -pub struct Transaction { - pub transaction_type: TransactionType, - pub account_id: u32, +pub struct Posting { + posting_id: PostingId, + pub posting_type: PostingType, + pub account_id: AccountId, pub amount: u64 } +pub struct NewPosting { + pub posting_type: PostingType, + pub account_id: AccountId, + pub amount: u64 +} + +impl NewPosting { + fn new(posting_type: PostingType, account_id: AccountId, amount: u64) -> NewPosting { + NewPosting { + posting_type, + account_id, + amount + } + } +} + pub struct JournalEntry { + journal_entry_id: JournalEntryId, pub date: DateTime<Utc>, - pub transactions: Vec<Transaction>, + pub postings: Vec<Posting>, pub description: String } + +pub struct NewJournalEntry { + pub date: DateTime<Utc>, + pub postings: Vec<NewPosting>, + pub description: String +} + +impl NewJournalEntry { + fn new(date: DateTime<Utc>, postings: Vec<NewPosting>, description: impl Into<String>) -> NewJournalEntry { + NewJournalEntry { + date, + postings, + description: description.into() + } + } +} |
