aboutsummaryrefslogtreecommitdiff
path: root/object/type
diff options
context:
space:
mode:
Diffstat (limited to 'object/type')
-rw-r--r--object/type/details.go10
-rw-r--r--object/type/is_base.go7
-rw-r--r--object/type/name.go39
-rw-r--r--object/type/parse.go8
-rw-r--r--object/type/table.go21
-rw-r--r--object/type/type.go (renamed from object/type/objecttype.go)13
6 files changed, 50 insertions, 48 deletions
diff --git a/object/type/details.go b/object/type/details.go
new file mode 100644
index 00000000..17bdcfd4
--- /dev/null
+++ b/object/type/details.go
@@ -0,0 +1,10 @@
+package objecttype
+
+type typeDetails struct {
+ name string
+ isBaseObject bool
+}
+
+func (ty Type) details() typeDetails {
+ return typeTable[ty]
+}
diff --git a/object/type/is_base.go b/object/type/is_base.go
new file mode 100644
index 00000000..cdc11f5b
--- /dev/null
+++ b/object/type/is_base.go
@@ -0,0 +1,7 @@
+package objecttype
+
+// IsBaseObject reports whether ty is one of the four canonical Git object
+// types encoded directly in pack entries.
+func (ty Type) IsBaseObject() bool {
+ return ty.details().isBaseObject
+}
diff --git a/object/type/name.go b/object/type/name.go
index d5636be9..c95fe90b 100644
--- a/object/type/name.go
+++ b/object/type/name.go
@@ -1,42 +1,11 @@
package objecttype
-const (
- typeNameBlob = "blob"
- typeNameTree = "tree"
- typeNameCommit = "commit"
- typeNameTag = "tag"
-)
-
-// Parse parses a canonical Git object type name.
-func Parse(name string) (Type, bool) {
- switch name {
- case typeNameBlob:
- return TypeBlob, true
- case typeNameTree:
- return TypeTree, true
- case typeNameCommit:
- return TypeCommit, true
- case typeNameTag:
- return TypeTag, true
- default:
- return TypeInvalid, false
- }
-}
-
// Name returns the canonical Git object type name.
func (ty Type) Name() (string, bool) {
- switch ty {
- case TypeBlob:
- return typeNameBlob, true
- case TypeTree:
- return typeNameTree, true
- case TypeCommit:
- return typeNameCommit, true
- case TypeTag:
- return typeNameTag, true
- case TypeInvalid, TypeFuture, TypeOfsDelta, TypeRefDelta:
- return "", false
- default:
+ details := ty.details()
+ if details.name == "" {
return "", false
}
+
+ return details.name, true
}
diff --git a/object/type/parse.go b/object/type/parse.go
new file mode 100644
index 00000000..bc5ca736
--- /dev/null
+++ b/object/type/parse.go
@@ -0,0 +1,8 @@
+package objecttype
+
+// Parse parses a canonical Git object type name.
+func Parse(name string) (Type, bool) {
+ ty, ok := typeByName[name]
+
+ return ty, ok
+}
diff --git a/object/type/table.go b/object/type/table.go
new file mode 100644
index 00000000..19cc760d
--- /dev/null
+++ b/object/type/table.go
@@ -0,0 +1,21 @@
+package objecttype
+
+//nolint:gochecknoglobals
+var typeTable = [...]typeDetails{
+ TypeInvalid: {},
+ TypeCommit: {name: "commit", isBaseObject: true},
+ TypeTree: {name: "tree", isBaseObject: true},
+ TypeBlob: {name: "blob", isBaseObject: true},
+ TypeTag: {name: "tag", isBaseObject: true},
+ TypeFuture: {},
+ TypeOfsDelta: {},
+ TypeRefDelta: {},
+}
+
+//nolint:gochecknoglobals
+var typeByName = map[string]Type{
+ typeTable[TypeCommit].name: TypeCommit,
+ typeTable[TypeTree].name: TypeTree,
+ typeTable[TypeBlob].name: TypeBlob,
+ typeTable[TypeTag].name: TypeTag,
+}
diff --git a/object/type/objecttype.go b/object/type/type.go
index d803cadf..18e0ac35 100644
--- a/object/type/objecttype.go
+++ b/object/type/type.go
@@ -14,16 +14,3 @@ const (
TypeOfsDelta Type = 6
TypeRefDelta Type = 7
)
-
-// IsBaseObject reports whether ty is one of the four canonical Git object
-// types encoded directly in pack entries.
-func (ty Type) IsBaseObject() bool {
- switch ty {
- case TypeCommit, TypeTree, TypeBlob, TypeTag:
- return true
- case TypeInvalid, TypeFuture, TypeOfsDelta, TypeRefDelta:
- return false
- default:
- return false
- }
-}