2020-02-07 22:33:08 +01:00
|
|
|
// This package hosts the serialization and deserialization logic for all of the
|
|
|
|
// data types with which our application interacts from the YNAB API.
|
2022-11-21 06:24:47 +01:00
|
|
|
package ynabSerde
|
2020-02-07 22:33:08 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Transaction struct {
|
|
|
|
Id string `json:"id"`
|
|
|
|
Date time.Time `json:"date"`
|
|
|
|
Amount int `json:"amount"`
|
|
|
|
Memo string `json:"memo"`
|
|
|
|
Cleared string `json:"cleared"`
|
|
|
|
Approved bool `json:"approved"`
|
|
|
|
FlagColor string `json:"flag_color"`
|
|
|
|
AccountId string `json:"account_id"`
|
|
|
|
AccountName string `json:"account_name"`
|
|
|
|
PayeeId string `json:"payeed_id"`
|
|
|
|
PayeeName string `json:"payee_name"`
|
|
|
|
CategoryId string `json:"category_id"`
|
|
|
|
CategoryName string `json:"category_name"`
|
|
|
|
Deleted bool `json:"deleted"`
|
|
|
|
// TransferAccountId interface{} `json:"transfer_account_id"`
|
|
|
|
// TransferTransactionId interface{} `json:"transfer_transaction_id"`
|
|
|
|
// MatchedTransactionId interface{} `json:"matched_transaction_id"`
|
|
|
|
// ImportId interface{} `json:"import_id"`
|
|
|
|
// Subtransactions interface{} `json:"subtransactions"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempts to encode a YNAB transaction into a string.
|
|
|
|
func serializeTx(tx *Transaction) (string, error) {
|
|
|
|
x, err := json.Marshal(tx)
|
|
|
|
return string(x), err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempts to parse a string encoding a transaction presumably sent from a
|
|
|
|
// YNAB server.
|
|
|
|
func deserializeTx(x string) (*Transaction, error) {
|
|
|
|
target := &Transaction{}
|
|
|
|
err := json.Unmarshal([]byte(x), target)
|
|
|
|
return target, err
|
|
|
|
}
|