-
Notifications
You must be signed in to change notification settings - Fork 249
/
bufcore.go
73 lines (63 loc) · 2.27 KB
/
bufcore.go
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
// Copyright 2020-2021 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package bufcore contains core types.
package bufcore
import (
"sort"
"github.com/bufbuild/buf/internal/pkg/storage"
)
// FileInfo contains protobuf file info.
type FileInfo interface {
// Path is the path of the file relative to the root it is contained within.
// This will be normalized, validated and never empty,
// This will be unique within a given Image.
Path() string
// ExternalPath returns the path that identifies this file externally.
//
// This will be unnormalized.
// Never empty. Falls back to Path if there is not an external path.
//
// Example:
// Assume we had the input path /foo/bar which is a local directory.
// Path: one/one.proto
// RootDirPath: proto
// ExternalPath: /foo/bar/proto/one/one.proto
ExternalPath() string
// IsImport returns true if this file is an import.
IsImport() bool
// WithIsImport returns this FileInfo with the given IsImport value.
WithIsImport(isImport bool) FileInfo
isFileInfo()
}
// NewFileInfo returns a new FileInfo.
//
// If externalPath is empty, path is used.
func NewFileInfo(path string, externalPath string, isImport bool) (FileInfo, error) {
return newFileInfo(path, externalPath, isImport)
}
// NewFileInfoForObjectInfo returns a new FileInfo for the storage.ObjectInfo.
//
// The same rules apply to ObjectInfos for paths as FileInfos so we do not need to validate.
func NewFileInfoForObjectInfo(objectInfo storage.ObjectInfo, isImport bool) FileInfo {
return newFileInfoForObjectInfo(objectInfo, isImport)
}
// SortFileInfos sorts the FileInfos.
func SortFileInfos(fileInfos []FileInfo) {
sort.Slice(
fileInfos,
func(i int, j int) bool {
return fileInfos[i].Path() < fileInfos[j].Path()
},
)
}