2960: Refactor keepstore into a streaming server.
[arvados.git] / sdk / go / arvados / fs_backend.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package arvados
6
7 import (
8         "context"
9         "errors"
10         "io"
11 )
12
13 type fsBackend interface {
14         keepClient
15         apiClient
16 }
17
18 // Ideally *Client would do everything; meanwhile keepBackend
19 // implements fsBackend by merging the two kinds of arvados client.
20 type keepBackend struct {
21         keepClient
22         apiClient
23 }
24
25 type keepClient interface {
26         ReadAt(locator string, p []byte, off int) (int, error)
27         BlockWrite(context.Context, BlockWriteOptions) (BlockWriteResponse, error)
28         LocalLocator(locator string) (string, error)
29 }
30
31 type apiClient interface {
32         RequestAndDecode(dst interface{}, method, path string, body io.Reader, params interface{}) error
33 }
34
35 var errStubClient = errors.New("stub client")
36
37 type StubClient struct{}
38
39 func (*StubClient) ReadAt(string, []byte, int) (int, error) { return 0, errStubClient }
40 func (*StubClient) LocalLocator(loc string) (string, error) { return loc, nil }
41 func (*StubClient) BlockWrite(context.Context, BlockWriteOptions) (BlockWriteResponse, error) {
42         return BlockWriteResponse{}, errStubClient
43 }
44 func (*StubClient) RequestAndDecode(_ interface{}, _, _ string, _ io.Reader, _ interface{}) error {
45         return errStubClient
46 }