class Puppet::Pops::Serialization::ObjectWriter

Instance writer for objects that implement {Types::PuppetObject} @api private

Constants

INSTANCE

Public Instance Methods

write(type, value, serializer) click to toggle source
   # File lib/puppet/pops/serialization/object.rb
43 def write(type, value, serializer)
44   impl_class = value.class
45   (names, _, required_count) = type.parameter_info(impl_class)
46   args = names.map { |name| value.send(name) }
47 
48   # Pop optional arguments that are default
49   while args.size > required_count
50     break unless type[names[args.size-1]].default_value?(args.last)
51     args.pop
52   end
53 
54   if type.name.start_with?('Pcore::') || serializer.type_by_reference?
55     serializer.push_written(value)
56     serializer.start_pcore_object(type.name, args.size)
57   else
58     serializer.start_object(args.size + 1)
59     serializer.write(type)
60     serializer.push_written(value)
61   end
62 
63   args.each { |arg| serializer.write(arg) }
64 end