Skip to content

Commit c0810b8

Browse files
committed
files: Fix parsing of return value for MoveV2 and CopyV2 - fixes #27
1 parent 3620be1 commit c0810b8

File tree

2 files changed

+78
-58
lines changed

2 files changed

+78
-58
lines changed

dropbox/files/metadata.go

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ package files
2323
import "encoding/json"
2424

2525
type listFolderResult struct {
26-
Entries []metadataUnion `json:"entries"`
27-
Cursor string `json:"cursor"`
28-
HasMore bool `json:"has_more"`
26+
Entries []json.RawMessage `json:"entries"`
27+
Cursor string `json:"cursor"`
28+
HasMore bool `json:"has_more"`
2929
}
3030

3131
// UnmarshalJSON deserializes into a ListFolderResult instance
@@ -38,21 +38,18 @@ func (r *ListFolderResult) UnmarshalJSON(b []byte) error {
3838
r.HasMore = l.HasMore
3939
r.Entries = make([]IsMetadata, len(l.Entries))
4040
for i, e := range l.Entries {
41-
switch e.Tag {
42-
case "file":
43-
r.Entries[i] = e.File
44-
case "folder":
45-
r.Entries[i] = e.Folder
46-
case "deleted":
47-
r.Entries[i] = e.Deleted
41+
metadata, err := IsMetadataFromJSON(e)
42+
if err != nil {
43+
return err
4844
}
45+
r.Entries[i] = metadata
4946
}
5047
return nil
5148
}
5249

5350
type searchMatch struct {
5451
MatchType *SearchMatchType `json:"match_type"`
55-
Metadata metadataUnion `json:"metadata"`
52+
Metadata json.RawMessage `json:"metadata"`
5653
}
5754

5855
// UnmarshalJSON deserializes into a SearchMatch instance
@@ -62,38 +59,51 @@ func (s *SearchMatch) UnmarshalJSON(b []byte) error {
6259
return err
6360
}
6461
s.MatchType = m.MatchType
65-
e := m.Metadata
66-
switch e.Tag {
67-
case "file":
68-
s.Metadata = e.File
69-
case "folder":
70-
s.Metadata = e.Folder
71-
case "deleted":
72-
s.Metadata = e.Deleted
62+
metadata, err := IsMetadataFromJSON(m.Metadata)
63+
if err != nil {
64+
return err
7365
}
66+
s.Metadata = metadata
7467
return nil
7568
}
7669

7770
type deleteResult struct {
7871
FileOpsResult
79-
Metadata metadataUnion `json:"metadata"`
72+
Metadata json.RawMessage `json:"metadata"`
8073
}
8174

82-
// UnmarshalJSON deserializes into a SearchMatch instance
75+
// UnmarshalJSON deserializes into a DeleteResult instance
8376
func (s *DeleteResult) UnmarshalJSON(b []byte) error {
8477
var m deleteResult
8578
if err := json.Unmarshal(b, &m); err != nil {
8679
return err
8780
}
8881
s.FileOpsResult = m.FileOpsResult
89-
e := m.Metadata
90-
switch e.Tag {
91-
case "file":
92-
s.Metadata = e.File
93-
case "folder":
94-
s.Metadata = e.Folder
95-
case "deleted":
96-
s.Metadata = e.Deleted
82+
metadata, err := IsMetadataFromJSON(m.Metadata)
83+
if err != nil {
84+
return err
85+
}
86+
s.Metadata = metadata
87+
return nil
88+
}
89+
90+
type relocationResult struct {
91+
FileOpsResult
92+
// Metadata : Metadata of the relocated object.
93+
Metadata json.RawMessage `json:"metadata"`
94+
}
95+
96+
// UnmarshalJSON deserializes into a RelocationResult instance
97+
func (s *RelocationResult) UnmarshalJSON(b []byte) error {
98+
var m relocationResult
99+
if err := json.Unmarshal(b, &m); err != nil {
100+
return err
101+
}
102+
s.FileOpsResult = m.FileOpsResult
103+
metadata, err := IsMetadataFromJSON(m.Metadata)
104+
if err != nil {
105+
return err
97106
}
107+
s.Metadata = metadata
98108
return nil
99109
}

generator/go_rsrc/files/metadata.go

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ package files
2323
import "encoding/json"
2424

2525
type listFolderResult struct {
26-
Entries []metadataUnion `json:"entries"`
27-
Cursor string `json:"cursor"`
28-
HasMore bool `json:"has_more"`
26+
Entries []json.RawMessage `json:"entries"`
27+
Cursor string `json:"cursor"`
28+
HasMore bool `json:"has_more"`
2929
}
3030

3131
// UnmarshalJSON deserializes into a ListFolderResult instance
@@ -38,21 +38,18 @@ func (r *ListFolderResult) UnmarshalJSON(b []byte) error {
3838
r.HasMore = l.HasMore
3939
r.Entries = make([]IsMetadata, len(l.Entries))
4040
for i, e := range l.Entries {
41-
switch e.Tag {
42-
case "file":
43-
r.Entries[i] = e.File
44-
case "folder":
45-
r.Entries[i] = e.Folder
46-
case "deleted":
47-
r.Entries[i] = e.Deleted
41+
metadata, err := IsMetadataFromJSON(e)
42+
if err != nil {
43+
return err
4844
}
45+
r.Entries[i] = metadata
4946
}
5047
return nil
5148
}
5249

5350
type searchMatch struct {
5451
MatchType *SearchMatchType `json:"match_type"`
55-
Metadata metadataUnion `json:"metadata"`
52+
Metadata json.RawMessage `json:"metadata"`
5653
}
5754

5855
// UnmarshalJSON deserializes into a SearchMatch instance
@@ -62,38 +59,51 @@ func (s *SearchMatch) UnmarshalJSON(b []byte) error {
6259
return err
6360
}
6461
s.MatchType = m.MatchType
65-
e := m.Metadata
66-
switch e.Tag {
67-
case "file":
68-
s.Metadata = e.File
69-
case "folder":
70-
s.Metadata = e.Folder
71-
case "deleted":
72-
s.Metadata = e.Deleted
62+
metadata, err := IsMetadataFromJSON(m.Metadata)
63+
if err != nil {
64+
return err
7365
}
66+
s.Metadata = metadata
7467
return nil
7568
}
7669

7770
type deleteResult struct {
7871
FileOpsResult
79-
Metadata metadataUnion `json:"metadata"`
72+
Metadata json.RawMessage `json:"metadata"`
8073
}
8174

82-
// UnmarshalJSON deserializes into a SearchMatch instance
75+
// UnmarshalJSON deserializes into a DeleteResult instance
8376
func (s *DeleteResult) UnmarshalJSON(b []byte) error {
8477
var m deleteResult
8578
if err := json.Unmarshal(b, &m); err != nil {
8679
return err
8780
}
8881
s.FileOpsResult = m.FileOpsResult
89-
e := m.Metadata
90-
switch e.Tag {
91-
case "file":
92-
s.Metadata = e.File
93-
case "folder":
94-
s.Metadata = e.Folder
95-
case "deleted":
96-
s.Metadata = e.Deleted
82+
metadata, err := IsMetadataFromJSON(m.Metadata)
83+
if err != nil {
84+
return err
85+
}
86+
s.Metadata = metadata
87+
return nil
88+
}
89+
90+
type relocationResult struct {
91+
FileOpsResult
92+
// Metadata : Metadata of the relocated object.
93+
Metadata json.RawMessage `json:"metadata"`
94+
}
95+
96+
// UnmarshalJSON deserializes into a RelocationResult instance
97+
func (s *RelocationResult) UnmarshalJSON(b []byte) error {
98+
var m relocationResult
99+
if err := json.Unmarshal(b, &m); err != nil {
100+
return err
101+
}
102+
s.FileOpsResult = m.FileOpsResult
103+
metadata, err := IsMetadataFromJSON(m.Metadata)
104+
if err != nil {
105+
return err
97106
}
107+
s.Metadata = metadata
98108
return nil
99109
}

0 commit comments

Comments
 (0)