about summary refs log tree commit diff
path: root/tools/monzo_ynab/ynab/serde.go
blob: 53dd33e83637e03d4be01e6a02a07b5555f510c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// This package hosts the serialization and deserialization logic for all of the
// data types with which our application interacts from the YNAB API.
package main

import (
	"encoding/json"
	"fmt"
	"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
}

func main() {
	target, _ := deserializeTx(tx)
	out, _ := serializeTx(target)
	fmt.Println(out)
	fmt.Println(ynabOut)
}