summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs46
-rw-r--r--src/types.rs34
2 files changed, 80 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..5350945
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,46 @@
+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);
+ }
+ }
+}
diff --git a/src/types.rs b/src/types.rs
new file mode 100644
index 0000000..2e83ea2
--- /dev/null
+++ b/src/types.rs
@@ -0,0 +1,34 @@
+use chrono::{DateTime, Utc};
+
+pub enum AccountType {
+ Asset,
+ Liability,
+ Equity,
+ Revenue,
+ Expense
+}
+
+pub struct Account {
+ pub account_id: u32,
+ pub account_type: AccountType,
+ pub name: String,
+ pub description: String,
+}
+
+#[derive(PartialEq)]
+pub enum TransactionType {
+ Debit,
+ Credit
+}
+
+pub struct Transaction {
+ pub transaction_type: TransactionType,
+ pub account_id: u32,
+ pub amount: u64
+}
+
+pub struct JournalEntry {
+ pub date: DateTime<Utc>,
+ pub transactions: Vec<Transaction>,
+ pub description: String
+}