Optimizing is difficult: I like flat hierarchies because I don't like directory-hopping, but I also would like a cleaner root for my mono-repo. Bombs away! Well it's that time again, folks: spring cleaning! Here I am musing about a few things that bother me: - Should I use kebab-case or snake_case? - It feels ~confusing to have //tools and //utils. What a //projects? Isn't everything a project? *sigh*
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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)
 | 
						|
}
 |