mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-08 05:47:07 +09:00
115 lines
2.4 KiB
Go
115 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/gogo/protobuf/jsonpb"
|
|
"github.com/gogo/protobuf/proto"
|
|
|
|
"github.com/anyproto/anytype-heart/pb"
|
|
)
|
|
|
|
func run() error {
|
|
if len(os.Args) == 1 {
|
|
return fmt.Errorf("select command: generate-json-helpers")
|
|
}
|
|
|
|
if os.Args[1] == "generate-json-helpers" {
|
|
return generateJsonHelpers()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func generateJsonHelpers() error {
|
|
rootPath := "./tests/integration/testdata/import"
|
|
entries, err := os.ReadDir(rootPath)
|
|
if err != nil {
|
|
return fmt.Errorf("read dir: %w", err)
|
|
}
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
err := generateJsonHelpersForImportCase(filepath.Join(rootPath, entry.Name()))
|
|
if err != nil {
|
|
return fmt.Errorf("generate json helpers for dir %s: %w", entry.Name(), err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func generateJsonHelpersForImportCase(dir string) error {
|
|
entries, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
return fmt.Errorf("read dir: %w", err)
|
|
}
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
continue
|
|
}
|
|
// Remove old json files
|
|
if filepath.Ext(entry.Name()) == ".txt" {
|
|
path := filepath.Join(dir, entry.Name())
|
|
fmt.Println("delete old json file: ", path)
|
|
err := os.Remove(path)
|
|
if err != nil {
|
|
return fmt.Errorf("remove file: %w", err)
|
|
}
|
|
}
|
|
}
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
continue
|
|
}
|
|
if filepath.Ext(entry.Name()) == ".pb" {
|
|
err = generateJsonHelper(dir, entry.Name())
|
|
if err != nil {
|
|
return fmt.Errorf("generate helper: %w", err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func generateJsonHelper(dir string, pbFileName string) error {
|
|
f, err := os.Open(filepath.Join(dir, pbFileName))
|
|
if err != nil {
|
|
return fmt.Errorf("open file: %w", err)
|
|
}
|
|
defer f.Close()
|
|
snapshot := &pb.SnapshotWithType{}
|
|
|
|
data, err := io.ReadAll(f)
|
|
if err != nil {
|
|
return fmt.Errorf("read pb file: %w", err)
|
|
}
|
|
err = proto.Unmarshal(data, snapshot)
|
|
if err != nil {
|
|
return fmt.Errorf("unmarshal pb: %w", err)
|
|
}
|
|
|
|
jsonFilePath := filepath.Join(dir, pbFileName+".txt")
|
|
jsonFile, err := os.Create(jsonFilePath)
|
|
if err != nil {
|
|
return fmt.Errorf("create file: %w", err)
|
|
}
|
|
defer jsonFile.Close()
|
|
|
|
marshaler := &jsonpb.Marshaler{Indent: " "}
|
|
err = marshaler.Marshal(jsonFile, snapshot)
|
|
if err != nil {
|
|
return fmt.Errorf("marshal to json: %w", err)
|
|
}
|
|
fmt.Println("created json file: ", jsonFilePath)
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
err := run()
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|