1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package memory
import (
"bytes"
"io"
"lindenii.org/go/furgit/object/header"
"lindenii.org/go/furgit/object/id"
"lindenii.org/go/furgit/object/store"
"lindenii.org/go/furgit/object/typ"
)
// ReadBytesFull reads one full object, including the object header.
func (memory *Memory) ReadBytesFull(id id.ObjectID) ([]byte, error) {
obj, ok := memory.objects.Load(id)
if !ok {
return nil, store.ErrObjectNotFound
}
raw := header.Append(nil, obj.ty, len(obj.content))
raw = append(raw, obj.content...)
return raw, nil
}
// ReadBytesContent reads one object body.
func (memory *Memory) ReadBytesContent(id id.ObjectID) (typ.Type, []byte, error) {
obj, ok := memory.objects.Load(id)
if !ok {
return typ.Unknown, nil, store.ErrObjectNotFound
}
return obj.ty, append([]byte(nil), obj.content...), nil
}
// ReadHeader reads one object header.
func (memory *Memory) ReadHeader(id id.ObjectID) (typ.Type, int, error) {
obj, ok := memory.objects.Load(id)
if !ok {
return typ.Unknown, 0, store.ErrObjectNotFound
}
return obj.ty, len(obj.content), nil
}
// ReadSize reads one object size.
func (memory *Memory) ReadSize(id id.ObjectID) (int, error) {
_, size, err := memory.ReadHeader(id)
if err != nil {
return 0, err
}
return size, nil
}
// ReadReaderFull reads one full object through a reader.
func (memory *Memory) ReadReaderFull(id id.ObjectID) (io.ReadCloser, error) {
raw, err := memory.ReadBytesFull(id)
if err != nil {
return nil, err
}
return io.NopCloser(bytes.NewReader(raw)), nil
}
// ReadReaderContent reads one object body through a reader.
func (memory *Memory) ReadReaderContent(id id.ObjectID) (typ.Type, int, io.ReadCloser, error) {
ty, content, err := memory.ReadBytesContent(id)
if err != nil {
return typ.Unknown, 0, nil, err
}
return ty, len(content), io.NopCloser(bytes.NewReader(content)), nil
}
// Refresh is a no-op for in-memory object stores.
func (memory *Memory) Refresh() error {
return nil
}
|