diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-10 13:18:30 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-10 13:35:20 -0600 |
commit | 27401b6ea459921a6152ab1744da1618358465f4 (patch) | |
tree | 2c4f9c096f1a593e65d7f824901e815ca48bfaf0 /pkg/util/ref.go | |
parent | 42f6f78e0a32ba0eda707154f8e1ffb4579604ee (diff) |
Rename the module, mv pkg lib
Diffstat (limited to 'pkg/util/ref.go')
-rw-r--r-- | pkg/util/ref.go | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/pkg/util/ref.go b/pkg/util/ref.go deleted file mode 100644 index aecfb9f..0000000 --- a/pkg/util/ref.go +++ /dev/null @@ -1,54 +0,0 @@ -package util - -import ( - "fmt" - "io" - - "lukeshu.com/btrfs-tools/pkg/binstruct" -) - -type File[A ~int64] interface { - Name() string - Size() (A, error) - ReadAt(p []byte, off A) (n int, err error) - WriteAt(p []byte, off A) (n int, err error) -} - -var ( - _ io.WriterAt = File[int64](nil) - _ io.ReaderAt = File[int64](nil) -) - -type Ref[A ~int64, T any] struct { - File File[A] - Addr A - Data T -} - -func (r *Ref[A, T]) Read() error { - size := binstruct.StaticSize(r.Data) - buf := make([]byte, size) - if _, err := r.File.ReadAt(buf, r.Addr); err != nil { - return err - } - n, err := binstruct.Unmarshal(buf, &r.Data) - if err != nil { - return err - } - if n != size { - return fmt.Errorf("util.Ref[%T].Read: left over data: read %v bytes but only consumed %v", - r.Data, size, n) - } - return nil -} - -func (r *Ref[A, T]) Write() error { - buf, err := binstruct.Marshal(r.Data) - if err != nil { - return err - } - if _, err = r.File.WriteAt(buf, r.Addr); err != nil { - return err - } - return nil -} |