From df6d5f7e24a290718adf8f068649c3bc61f5eb4d Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Tue, 24 Aug 2021 18:31:13 +0200 Subject: refactor: extract chunk.og & add Reader getter --- chunk.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 chunk.go (limited to 'chunk.go') diff --git a/chunk.go b/chunk.go new file mode 100644 index 0000000..9f09e55 --- /dev/null +++ b/chunk.go @@ -0,0 +1,47 @@ +package main + +import ( + "bytes" + "fmt" + "io" + "log" + "os" + "path" +) + +type ChunkId struct { + Ver int + Idx uint64 +} + +func (i *ChunkId) Reader(repo string) io.Reader { + p := path.Join(repo, fmt.Sprintf(versionFmt, i.Ver), chunksName, fmt.Sprintf(chunkIdFmt, i.Idx)) + f, err := os.Open(p) + if err != nil { + log.Printf("Cannot open chunk %s\n", p) + } + return f +} + +type Chunk struct { + Id *ChunkId + Value []byte +} + +func (c *Chunk) Reader(repo string) (io.Reader, error) { + if c.Value != nil { + return bytes.NewReader(c.Value), nil + } + if c.Id != nil { + return c.Id.Reader(repo), nil + } + return nil, &ChunkError{"Uninitialized chunk"} +} + +type ChunkError struct { + err string +} + +func (e *ChunkError) Error() string { + return fmt.Sprintf("Chunk error: %s", e.err) +} -- cgit v1.2.3