Skip to content

Commit

Permalink
disk(new): add disk module with generic read/write functions
Browse files Browse the repository at this point in the history
  • Loading branch information
iquidus committed Dec 6, 2023
1 parent 6158953 commit 0ba83b1
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
39 changes: 39 additions & 0 deletions disk/disk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package disk

import (
"encoding/json"
"errors"
"io/fs"
"os"
)

func ReadJsonFile[E any](path string, obj *E) error {
if obj == nil {
return errors.New("obj is nil")
}

file, err := os.ReadFile(path)
if err != nil {
return err
}

err = json.Unmarshal(file, obj)
if err != nil {
return err
}
return nil
}

func WriteJsonFile[E any](obj E, path string, perm fs.FileMode) error {
towrite, err := json.MarshalIndent(obj, "", " ")
if err != nil {
return err
}

err = os.WriteFile(path, towrite, perm)
if err != nil {
return err
}

return nil
}
52 changes: 52 additions & 0 deletions disk/disk_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package disk

import (
"os"
"testing"
)

func TestJsonFile(t *testing.T) {
// test data
type testStruct struct {
A int
B string
C []int
}
testData := testStruct{
A: 1,
B: "test",
C: []int{1, 2, 3},
}
// write test data to file
err := WriteJsonFile[testStruct](testData, "../testdata/test.json", 0644)
if err != nil {
t.Error("Error writing file: ", err)
}
// read test data from file
var readData testStruct
err = ReadJsonFile[testStruct]("../testdata/test.json", &readData)
if err != nil {
t.Error("Error reading file: ", err)
}
// compare test data to read data
if testData.A != readData.A {
t.Errorf("TestJsonFile A = %d; want %d", readData.A, testData.A)
}
if testData.B != readData.B {
t.Errorf("TestJsonFile B = %s; want %s", readData.B, testData.B)
}
if len(testData.C) != len(readData.C) {
t.Errorf("TestJsonFile C = %d; want %d", len(readData.C), len(testData.C))
}
for i := range testData.C {
if testData.C[i] != readData.C[i] {
t.Errorf("TestJsonFile C[%d] = %d; want %d", i, readData.C[i], testData.C[i])
}
}

// clean up
err = os.Remove("../testdata/test.json")
if err != nil {
t.Error("Error removing file: ", err)
}
}

0 comments on commit 0ba83b1

Please sign in to comment.