Files
relspecgo/pkg/writers/json/writer.go
T
warkanum 96281c9f03
Release / test (push) Failing after 2m20s
Release / release (push) Skipped
Release / pkg-aur (push) Skipped
Release / pkg-deb (push) Skipped
Release / pkg-rpm (push) Skipped
chore(ci): add govulncheck, staticcheck, go vet, gofumpt gates
* Add lint/format checks to the Gitea release workflow and Makefile
  (targets: vet, fmt, fmt-check, staticcheck, govulncheck, check)
* Switch .golangci.json formatter from gofmt to gofumpt (extra.group-params)
* Bump golang.org/x/text 0.37.0 -> 0.39.0 for GO-2026-5970; re-vendor
* Fix staticcheck S1011 in pkg/diff; drop unused pgsql writer helpers
* Fix gocritic unnamedResult (pkg/diff) and rangeValCopy (pkg/pgsql)
* Apply gofumpt + goimports formatting across the tree
2026-09-03 21:17:03 +02:00

65 lines
1.5 KiB
Go

package json
import (
"encoding/json"
"fmt"
"os"
"git.warky.dev/wdevs/relspecgo/pkg/models"
"git.warky.dev/wdevs/relspecgo/pkg/writers"
)
// Writer implements the writers.Writer interface for JSON format
type Writer struct {
options *writers.WriterOptions
}
// NewWriter creates a new JSON writer with the given options
func NewWriter(options *writers.WriterOptions) *Writer {
return &Writer{
options: options,
}
}
// WriteDatabase writes a complete database as JSON
func (w *Writer) WriteDatabase(db *models.Database) error {
// Pretty print JSON with indentation
data, err := json.MarshalIndent(db, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal database to JSON: %w", err)
}
return w.writeOutput(data)
}
// WriteSchema writes a schema as JSON
func (w *Writer) WriteSchema(schema *models.Schema) error {
data, err := json.MarshalIndent(schema, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal schema to JSON: %w", err)
}
return w.writeOutput(data)
}
// WriteTable writes a single table as JSON
func (w *Writer) WriteTable(table *models.Table) error {
data, err := json.MarshalIndent(table, "", " ")
if err != nil {
return fmt.Errorf("failed to marshal table to JSON: %w", err)
}
return w.writeOutput(data)
}
// writeOutput writes the content to file or stdout
func (w *Writer) writeOutput(data []byte) error {
if w.options.OutputPath != "" {
return os.WriteFile(w.options.OutputPath, data, 0o644)
}
// Print to stdout
fmt.Println(string(data))
return nil
}