Skip to content

tnfssc/goon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goon

Go implementation of the TOON data format.

Go Reference Go Report Card License

goon is a high-performance, strictly compliant Go library and CLI for parsing and generating TOON (The Object-Oriented Notation) data.

Features

  • 🚀 Fast & Efficient: Built with performance in mind using a custom scanner and recursive descent parser.
  • 🔄 Marshal/Unmarshal: Direct conversion between Go structs and TOON format with struct tag support (like encoding/json).
  • 🔒 Strict Mode: Optional strict validation to ensure your TOON files are perfectly formatted (no tabs, correct indentation).
  • 🛠️ CLI Tools: Includes goon encode and goon decode for easy integration into existing workflows.
  • 📦 Zero Dependencies: The core library has no external dependencies.

Installation

Quick Install (Script)

Linux & macOS

curl -fsSL https://raw.githubusercontent.com/tnfssc/goon/develop/scripts/install.sh | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/tnfssc/goon/develop/scripts/install.ps1 | iex

Manual Installation

Library

To use Goon in your Go project:

go get github.com/tnfssc/goon

CLI Tools

To install the command-line tool:

go install github.com/tnfssc/goon/cmd/goon@latest

Usage

Library

package main

import (
	"fmt"
	"log"

	"github.com/tnfssc/goon/pkg/toon"
)

type Config struct {
	Name     string   `toon:"name"`
	Version  string   `toon:"version"`
	Features []string `toon:"features"`
}

func main() {
	// Marshal Go struct to TOON (like json.Marshal)
	config := Config{
		Name:     "MyApp",
		Version:  "1.0.0",
		Features: []string{"fast", "reliable", "simple"},
	}

	toonData, err := toon.Marshal(config, toon.EncodeOptions{IndentSize: 2})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(toonData))

	// Unmarshal TOON to Go struct (like json.Unmarshal)
	var decoded Config
	err = toon.Unmarshal(toonData, &decoded, toon.DecodeOptions{IndentSize: 2})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Decoded: %+v\n", decoded)
}

CLI

Convert JSON to TOON:

goon encode input.json > output.toon

Convert TOON back to JSON:

goon decode input.toon > output.json

Pipe from stdin:

# JSON to TOON
cat data.json | goon encode > data.toon

# TOON to JSON
cat config.toon | goon decode > config.json

# Chain with other tools
curl https://api.example.com/data.json | goon encode > api-data.toon

TOON Syntax Support

Goon supports the full TOON specification, including:

  • Key-Value Pairs: Simple key: value syntax.
  • Nested Objects: Indentation-based hierarchy.
  • Arrays:
    • List format: key: [length|] followed by - item lines.
    • Coming Soon: Inline arrays and tabular arrays.
  • Primitives: Strings, numbers, booleans, and null.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE.md file for details.

About

Go implementation of the TOON data format.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •