summaryrefslogtreecommitdiff
path: root/findFilename.go
diff options
context:
space:
mode:
Diffstat (limited to 'findFilename.go')
-rw-r--r--findFilename.go20
1 files changed, 14 insertions, 6 deletions
diff --git a/findFilename.go b/findFilename.go
index d69b538..c99e289 100644
--- a/findFilename.go
+++ b/findFilename.go
@@ -1,6 +1,8 @@
package config
import (
+ "fmt"
+
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
)
@@ -8,8 +10,8 @@ import (
// Gemini AI can help author some pretty good protobuf code.
// I never remember the syntax for 'reflect' on these things.
-// returns "Filename" if it exists in the protobuf
-func GetFilename(pb proto.Message) (string, bool) {
+// this will try both "filename" and "Filename"
+func GetFilename(pb proto.Message) (string, error) {
// 1. Get the protoreflect.Message interface from the message.
// This is the entry point to the reflection API.
msg := pb.ProtoReflect()
@@ -19,18 +21,24 @@ func GetFilename(pb proto.Message) (string, bool) {
// 3. Find the specific field descriptor by its protobuf name ("Filename").
// Note: The field name must match the name in the .proto file.
- fieldName := protoreflect.Name("Filename")
+ fieldName := protoreflect.Name("filename")
fieldDescriptor := descriptor.Fields().ByName(fieldName)
+ // try upper case
+ if fieldDescriptor == nil {
+ fieldName = protoreflect.Name("Filename")
+ fieldDescriptor = descriptor.Fields().ByName(fieldName)
+ }
+
// 4. Check if the field was found. If not, return false.
if fieldDescriptor == nil {
- return "", false
+ return "", fmt.Errorf("fieldDescriptor == nil")
}
// 5. (Optional but recommended) Verify the field is a string type.
if fieldDescriptor.Kind() != protoreflect.StringKind {
// The field exists but is not a string, so we can't return it as one.
- return "", false
+ return "", fmt.Errorf("The field exists but is not a string")
}
// 6. If the field exists and is a string, get its value.
@@ -38,7 +46,7 @@ func GetFilename(pb proto.Message) (string, bool) {
value := msg.Get(fieldDescriptor)
// 7. Convert the protoreflect.Value to a native Go string.
- return value.String(), true
+ return value.String(), nil
}
// sets "Filename" if it exists in the protobuf