Class: Nl::DataTypes::SubMessage
Defined Under Namespace
Classes: Format
Instance Method Summary collapse
- #coerce(value, context:) ⇒ Object
- #decode(decoder, context:, nlattr_type_flags: 0) ⇒ Object
- #encode(encoder, value, context: nil) ⇒ Object
-
#initialize(selector, formats) ⇒ SubMessage
constructor
A new instance of SubMessage.
- #nlattr_type_flags(value = nil, context:) ⇒ Object
Constructor Details
#initialize(selector, formats) ⇒ SubMessage
Returns a new instance of SubMessage.
275 276 277 278 279 280 |
# File 'nl/lib/nl/datatypes.rb', line 275 def initialize(selector, formats) @selector = selector @formats = formats.transform_values do |format| format.is_a?(Format) ? format : Format.new(*format) end.freeze end |
Instance Method Details
#coerce(value, context:) ⇒ Object
295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'nl/lib/nl/datatypes.rb', line 295 def coerce(value, context:) if value.is_a?(RawSubMessage) @selector.read(context) # ensure selector value is present return value end format = @selector.select(context, @formats) return value if value.is_a?(format.type) return format.type.from_params(value, external_selectors: selectors(format, context)) if value.is_a?(Hash) raise TypeError, "value must be a Hash or an instance of #{format.type}" end |
#decode(decoder, context:, nlattr_type_flags: 0) ⇒ Object
321 322 323 324 325 326 327 328 329 |
# File 'nl/lib/nl/datatypes.rb', line 321 def decode(decoder, context:, nlattr_type_flags: 0) format = @selector.select(context, @formats) do return RawSubMessage.new( decoder.get_string, nlattr_type_flags:, ) end format.type.decode(decoder, external_selectors: selectors(format, context)) end |
#encode(encoder, value, context: nil) ⇒ Object
308 309 310 311 312 313 314 315 316 317 318 319 |
# File 'nl/lib/nl/datatypes.rb', line 308 def encode(encoder, value, context: nil) if value.is_a?(RawSubMessage) @selector.read(context) return value.encode(encoder) end format = @selector.select(context, @formats) unless value.is_a?(format.type) raise TypeError, "value must be an instance of #{format.type}" end value.encode(encoder, external_selectors: selectors(format, context)) end |
#nlattr_type_flags(value = nil, context:) ⇒ Object
282 283 284 285 286 287 288 289 290 291 292 293 |
# File 'nl/lib/nl/datatypes.rb', line 282 def nlattr_type_flags(value = nil, context:) if value.is_a?(RawSubMessage) @selector.read(context) return value.nlattr_type_flags end format = @selector.select(context, @formats) unless value.is_a?(format.type) raise TypeError, "value must be an instance of #{format.type}" end format.nested ? Raw::NLA_F_NESTED : 0 end |