diff options
| author | PROINT <> | 2026-07-22 09:43:33 +0700 |
|---|---|---|
| committer | PROINT <> | 2026-07-22 09:43:33 +0700 |
| commit | 2fb9ff9efbafa582ca7e83f12c61548d8e7a93ed (patch) | |
| tree | 26db2233f93e65f1fab6712533d918d69840693e /src | |
| parent | 8fb895991c8988e21273cc5092f39f28382b777c (diff) | |
Updated types.rs
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 41 | ||||
| -rw-r--r-- | src/types.rs | 93 |
2 files changed, 87 insertions, 47 deletions
diff --git a/src/main.rs b/src/main.rs index 5350945..bfc2330 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,44 +3,5 @@ mod types; use types::*; fn main() { - let asset = Account { - account_type: AccountType::Asset, - path: "1".to_string(), - name: "Asset".to_string(), - description: "Asset".to_string() - }; - let revenue = Account { - account_type: AccountType::Revenue, - path: "4".to_string(), - name: "Revenue".to_string(), - description: "Revenue".to_string() - }; - let asset_debit = Transaction { - transaction_type: TransactionType::Debit, - account: asset, - amount: 1000 - }; - let revenue_credit = Transaction { - transaction_type: TransactionType::Credit, - account: revenue, - amount: 1000 - }; - let entry = JournalEntry { - date: chrono::Utc::now(), - transactions: vec![asset_debit, revenue_credit], - balance: 1000, - description: "Paycheck".to_string() - }; - println!("date\t\t\t\t\taccount\tdebit\tcredit"); - print!("{}\t", entry.date); - for t in &entry.transactions { - if t.transaction_type == TransactionType::Debit { - println!("{}\t{}", t.account.name, t.amount); - } - } - for t in entry.transactions { - if t.transaction_type == TransactionType::Credit { - println!("\t\t\t\t\t{}\t\t{}", t.account.name, t.amount); - } - } + println!("Hello World!"); } 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() + } + } +} |
