microsoft_kiota_serialization_json 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd37741651e1e288638867e986be4039d33879632bf732042caed1ded233f700
4
- data.tar.gz: cbbeabf1db2c8eefac26d670f5624d993f38ed0dfd4b05d7af418b2a0e9548cf
3
+ metadata.gz: 7ddf6f99fb31acc71c42cea0e6b087efa575634c9232600c6b568229697c9389
4
+ data.tar.gz: 51d9e9f60534287d141f2922211a943649e7cb6b150aa224665b85e975a38f66
5
5
  SHA512:
6
- metadata.gz: 8a145bf20012867e99bb16820af1b19fbc030e69953b337cdf02dc7a60744e1afbbc01c86f79d944632cd67d44acc12ced255db3bcb81b2818ac1069e2f4147e
7
- data.tar.gz: 5b5756c96bcb734b93d0c790ea2009dcf98ff38d4e11b3454175ae8f2750e95cfd8fc64be8942b094f457ec1db75802ffb1405efb461acea2cb75a95d8a9d727
6
+ metadata.gz: c767f85a36ccd8a650dabd9daa4d698226e01a44b95ad36a1e1b1c84899c9b856751d91e0111f722f12549e6dd26b29ff7982f533fcea056d349786c36a1bfdc
7
+ data.tar.gz: 852474c98de9e0ab50d955565768e5ac55807d841dc079e4113efbe1b98a4af0514eea3af3936c63312b622c5464d3de7bde0f1aa8426e5bc2ac61672a910830
@@ -55,6 +55,10 @@ module MicrosoftKiotaSerializationJson
55
55
  MicrosoftKiotaAbstractions::ISODuration.new(@current_node) if @current_node.is_a?(String)
56
56
  end
57
57
 
58
+ def get_byte_array_value
59
+ @current_node.unpack1('m') if @current_node.is_a?(String)
60
+ end
61
+
58
62
  # The generator passes the type as a class, except for booleans which it passes as a plain
59
63
  # string. A `case` cannot dispatch on that: `when String` asks whether the type is an instance
60
64
  # of String, and a class is an instance of Class, so every branch fell through to the string
@@ -95,7 +99,7 @@ module MicrosoftKiotaSerializationJson
95
99
  @current_node.map do |object|
96
100
  next if object.nil?
97
101
 
98
- current_parse_node = JsonParseNode.new(object)
102
+ current_parse_node = child_node(object)
99
103
  current_parse_node.get_object_value(factory)
100
104
  end
101
105
  end
@@ -104,7 +108,12 @@ module MicrosoftKiotaSerializationJson
104
108
  raise StandardError, 'Factory cannot be null' if factory.nil?
105
109
 
106
110
  item = factory.call(self)
107
- assign_field_values(item)
111
+ begin
112
+ on_before_assign_field_values&.call(item)
113
+ assign_field_values(item)
114
+ ensure
115
+ on_after_assign_field_values&.call(item)
116
+ end
108
117
  item
109
118
  rescue StandardError => e
110
119
  raise e.class, 'Error during deserialization'
@@ -118,7 +127,7 @@ module MicrosoftKiotaSerializationJson
118
127
  next if v.nil?
119
128
 
120
129
  deserializer = fields[k]
121
- next deserializer.call(JsonParseNode.new(v)) if deserializer
130
+ next deserializer.call(child_node(v)) if deserializer
122
131
 
123
132
  additional_data = item.respond_to?(:additional_data) ? item.additional_data : nil
124
133
  next if additional_data.nil?
@@ -158,7 +167,17 @@ module MicrosoftKiotaSerializationJson
158
167
  return unless @current_node.is_a?(Hash)
159
168
 
160
169
  raw_value = @current_node[name]
161
- JsonParseNode.new(raw_value) if raw_value
170
+ child_node(raw_value) if raw_value
171
+ end
172
+
173
+ private
174
+
175
+ # nested nodes keep the callbacks so nested models are tracked too
176
+ def child_node(value)
177
+ JsonParseNode.new(value).tap do |node|
178
+ node.on_before_assign_field_values = on_before_assign_field_values
179
+ node.on_after_assign_field_values = on_after_assign_field_values
180
+ end
162
181
  end
163
182
  end
164
183
  end
@@ -102,6 +102,14 @@ module MicrosoftKiotaSerializationJson
102
102
  @writer[key] = value.string
103
103
  end
104
104
 
105
+ def write_byte_array_value(key, value)
106
+ raise StandardError, 'no key or value included in write_byte_array_value(key, value)' if key.nil? && value.nil?
107
+ return set_root_value([value].pack('m0')) if key.nil?
108
+ return if value.nil?
109
+
110
+ @writer[key] = [value].pack('m0')
111
+ end
112
+
105
113
  def write_collection_of_primitive_values(key, values)
106
114
  return unless values
107
115
  return set_root_value(values.map { |v| serialized_scalar(v) }) unless key
@@ -125,10 +133,16 @@ module MicrosoftKiotaSerializationJson
125
133
  if key
126
134
  @writer[key] = object_value_hash(*values)
127
135
  else
128
- values.each { |v| v.serialize(self) }
136
+ values.each { |v| serialize_object(v, self) }
129
137
  end
130
138
  end
131
139
 
140
+ def write_null_value(key)
141
+ return set_root_value(nil) if key.nil?
142
+
143
+ @writer[key] = nil
144
+ end
145
+
132
146
  def write_collection_of_enum_values(key, values)
133
147
  return unless values
134
148
 
@@ -160,12 +174,30 @@ module MicrosoftKiotaSerializationJson
160
174
  private
161
175
 
162
176
  def object_value_hash(value, *additional_values_to_merge)
163
- temp = JsonSerializationWriter.new
164
- value.serialize(temp)
165
- additional_values_to_merge.each { |v| v&.serialize(temp) }
177
+ temp = child_writer
178
+ serialize_object(value, temp)
179
+ additional_values_to_merge.each { |v| serialize_object(v, temp) unless v.nil? }
166
180
  temp.writer
167
181
  end
168
182
 
183
+ # the after hook runs even when writing the model raised, so callbacks can restore their state
184
+ def serialize_object(value, writer)
185
+ on_before_object_serialization&.call(value)
186
+ on_start_object_serialization&.call(value, writer)
187
+ value.serialize(writer)
188
+ ensure
189
+ on_after_object_serialization&.call(value)
190
+ end
191
+
192
+ # nested writers keep the callbacks so nested models write only their changes too
193
+ def child_writer
194
+ JsonSerializationWriter.new.tap do |writer|
195
+ writer.on_before_object_serialization = on_before_object_serialization
196
+ writer.on_after_object_serialization = on_after_object_serialization
197
+ writer.on_start_object_serialization = on_start_object_serialization
198
+ end
199
+ end
200
+
169
201
  public
170
202
 
171
203
  def serialized_scalar(value)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MicrosoftKiotaSerializationJson
4
- VERSION = '0.24.1' # x-release-please-version
4
+ VERSION = '0.25.0' # x-release-please-version
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microsoft_kiota_serialization_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.1
4
+ version: 0.25.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Microsoft Corporation
@@ -35,14 +35,14 @@ dependencies:
35
35
  requirements:
36
36
  - - '='
37
37
  - !ruby/object:Gem::Version
38
- version: 0.24.1
38
+ version: 0.25.0
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - '='
44
44
  - !ruby/object:Gem::Version
45
- version: 0.24.1
45
+ version: 0.25.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: uuidtools
48
48
  requirement: !ruby/object:Gem::Requirement