From 74f1c29bd87879642f3a75d429506a2d5e65126f Mon Sep 17 00:00:00 2001 From: boitsov14 <86334557+boitsov14@users.noreply.github.com> Date: Thu, 5 Oct 2023 20:38:55 +0900 Subject: [PATCH] fix: Add omitempty to multipartField (#102) * fix: Add omitempty to multipartField * fix: lint issue --- core/multipart.go | 19 ++++++++++++++----- docs/patterns-and-structure.md | 2 +- services/drive/files/create.go | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/core/multipart.go b/core/multipart.go index e1882d7..b64f2be 100644 --- a/core/multipart.go +++ b/core/multipart.go @@ -8,10 +8,11 @@ import ( const numberOfPartsKeyValue = 2 type multipartField struct { - Type string - Name string - Value []byte - Ref string + Type string + Name string + Value []byte + Ref string + OmitEmpty bool } func parseMultipartFields(r BaseRequest) map[string]multipartField { @@ -29,6 +30,10 @@ func parseMultipartFields(r BaseRequest) map[string]multipartField { } field := parseTag(tag) + if field.OmitEmpty && v.Field(i).IsZero() { + continue + } + if field.Name == "" { field.Name = v.Type().Field(i).Name } @@ -46,7 +51,11 @@ func parseTag(tag string) multipartField { for _, part := range strings.Split(tag, ",") { if !strings.Contains(part, "=") { - field.Name = part + if part == "omitempty" { + field.OmitEmpty = true + } else { + field.Name = part + } continue } diff --git a/docs/patterns-and-structure.md b/docs/patterns-and-structure.md index 152d233..d45f23e 100644 --- a/docs/patterns-and-structure.md +++ b/docs/patterns-and-structure.md @@ -39,7 +39,7 @@ Example multipart request struct: ```go // CreateRequest represents a request to create a file. type CreateRequest struct { - FolderID string `multipart:"folderId,type=field"` + FolderID string `multipart:"folderId,type=field,omitempty"` Name string `multipart:"name,type=field"` IsSensitive bool `multipart:"isSensitive,type=field"` Force bool `multipart:"force,type=field"` diff --git a/services/drive/files/create.go b/services/drive/files/create.go index ac56ac2..6d89168 100644 --- a/services/drive/files/create.go +++ b/services/drive/files/create.go @@ -7,7 +7,7 @@ import ( // CreateRequest represents a request to create a file. type CreateRequest struct { - FolderID string `multipart:"folderId,type=field"` + FolderID string `multipart:"folderId,type=field,omitempty"` Name string `multipart:"name,type=field"` IsSensitive bool `multipart:"isSensitive,type=field"` Force bool `multipart:"force,type=field"`