docs/data: export backend data

This commit is contained in:
dougal
2026-07-14 14:16:19 +01:00
committed by Nick Craig-Wood
parent 4089e5af48
commit 384dff5e52
3 changed files with 110 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
// Package info provides info about a backend
package info
import (
"fmt"
"strings"
"github.com/rclone/rclone/docs/data/backends"
"gopkg.in/yaml.v3"
)
// BackendConfig defines information about the backend
type BackendConfig struct {
Backend string `yaml:"backend"`
Name string `yaml:"name"`
Tier string `yaml:"tier"`
Maintainers string `yaml:"maintainers"`
FeaturesScore int `yaml:"features_score"`
IntegrationTests string `yaml:"integration_tests"`
DataIntegrity string `yaml:"data_integrity"`
Performance string `yaml:"performance"`
Adoption string `yaml:"adoption"`
Docs string `yaml:"docs"`
Security string `yaml:"security"`
Virtual bool `yaml:"virtual"`
Remote string `yaml:"remote"`
Features []string `yaml:"features"`
Hashes []string `yaml:"hashes"`
Precision int `yaml:"precision"`
}
// GetBackendConfig from docs/data/backends
func GetBackendConfig(name string) (*BackendConfig, error) {
fileName := fmt.Sprintf("%s.yaml", strings.ToLower(name))
data, err := backends.BackendFS.ReadFile(fileName)
if err != nil {
return nil, fmt.Errorf("could not find backend file %s: %w", fileName, err)
}
var config BackendConfig
err = yaml.Unmarshal(data, &config)
if err != nil {
return nil, fmt.Errorf("failed to parse YAML in %s: %w", fileName, err)
}
return &config, nil
}
+55
View File
@@ -0,0 +1,55 @@
package info
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGetBackendConfig(t *testing.T) {
// s3 tier test
conf, err := GetBackendConfig("S3")
require.NoError(t, err, "failed to load s3.yaml")
require.NotNil(t, conf, "config should not be nil")
assert.Equal(t, "Tier 1", conf.Tier, "s3 should be tier 1")
// memory backend (unlikely to change)
conf, err = GetBackendConfig("memory")
require.NoError(t, err, "failed to load s3.yaml")
require.NotNil(t, conf, "config should not be nil")
expectedMemoryConfig := &BackendConfig{
Backend: "memory",
Name: "Memory",
Tier: "Tier 1",
Maintainers: "Core",
FeaturesScore: 4,
IntegrationTests: "Passing",
DataIntegrity: "Hash",
Performance: "High",
Adoption: "Widely used",
Docs: "Full",
Security: "High",
Virtual: false,
Remote: ":memory:",
Features: []string{
"BucketBased",
"BucketBasedRootOK",
"Copy",
"ListP",
"ListR",
"PutStream",
"ReadMimeType",
"WriteMimeType",
},
Hashes: []string{
"md5",
},
Precision: 1,
}
assert.Equal(t, expectedMemoryConfig, conf, "parsed memory.yaml should match")
}