Skip to content

Commit

Permalink
Issue microsoft#28: Unsupported mapping
Browse files Browse the repository at this point in the history
Changes ensure that the collections are properly deliminated and map support for @odata.type --> microsoft.graph.eventMessageRequest
  • Loading branch information
dadams39 committed Jun 28, 2022
1 parent 0d36e95 commit a95ae16
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions json_serialization_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -685,61 +685,134 @@ func (w *JsonSerializationWriter) writeAdditional(key string, input any) error {
err = w.WriteDateOnlyValue(key, value)
case absser.DateOnly:
err = w.WriteDateOnlyValue(key, &value)
case *JsonParseNode:
if ok := additionalContains(key); !ok {
return fmt.Errorf("key of %s for ParseNode not supported", key)
}
w.writePropertyName(key)
embedded, err := value.GetStringValue()
if err != nil {
return err
}
w.writeStringValue(*embedded)
w.writePropertySeparator()
case map[string]int32:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]*int32:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]*int64:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]int64:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]string:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]*string:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()
case map[string]absser.Parsable:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return err
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()

case map[string]*JsonParseNode:
w.writePropertyName(key)
w.writeObjectStart()
for subkey, subvalue := range value {
err := w.writeAdditional(subkey, subvalue)
if err != nil {
return fmt.Errorf("embedded failure on %s, %v :%v", subkey,
subvalue, err)
}
}
w.trimLastPropertySeparator()
w.writeObjectEnd()
w.writePropertySeparator()

default:
return fmt.Errorf("unsupported AdditionalData type: %T", value)
}
return err
}

// additionalContains helper method that checks if the additional data
// key is knownType. Returns true iff the key matches is valid.
func additionalContains(key string) bool {
knownAdditional := []string{"dateTime", "timeZone"}
for _, approved := range knownAdditional {
if key == approved {
return true
}
}
return false
}

// Close clears the internal buffer.
func (w *JsonSerializationWriter) Close() error {
w.writer = make([]string, 0)
Expand Down

0 comments on commit a95ae16

Please sign in to comment.