Improved perfs
This commit is contained in:
@@ -22,9 +22,11 @@ type InterfaceMeta struct {
|
||||
Version int `json:"version"`
|
||||
}
|
||||
|
||||
// Store persists interface definitions as XML files under {storageDir}/interfaces/.
|
||||
// Store persists interface definitions as XML files under {storageDir}/interfaces/
|
||||
// and workspace-level JSON blobs directly in {storageDir}.
|
||||
type Store struct {
|
||||
dir string
|
||||
rootDir string // {storageDir} — for workspace-level files (groups.json, etc.)
|
||||
dir string // {storageDir}/interfaces
|
||||
}
|
||||
|
||||
// New opens (and creates, if needed) the storage directory.
|
||||
@@ -33,7 +35,22 @@ func New(storageDir string) (*Store, error) {
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
return nil, fmt.Errorf("create interfaces dir: %w", err)
|
||||
}
|
||||
return &Store{dir: dir}, nil
|
||||
return &Store{rootDir: storageDir, dir: dir}, nil
|
||||
}
|
||||
|
||||
// ReadGroups returns the raw JSON array of group tree nodes.
|
||||
// Returns an empty JSON array if no groups have been saved yet.
|
||||
func (s *Store) ReadGroups() ([]byte, error) {
|
||||
data, err := os.ReadFile(filepath.Join(s.rootDir, "groups.json"))
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
return []byte("[]"), nil
|
||||
}
|
||||
return data, err
|
||||
}
|
||||
|
||||
// WriteGroups persists the group tree. data must be a valid JSON array.
|
||||
func (s *Store) WriteGroups(data []byte) error {
|
||||
return os.WriteFile(filepath.Join(s.rootDir, "groups.json"), data, 0o644)
|
||||
}
|
||||
|
||||
// validateID returns an error if id could be used for path traversal or is
|
||||
|
||||
Reference in New Issue
Block a user