def convert_properties_to_reference(properties, build: true, tentative: false)
      iterate_non_primitives(properties) do |properties|
        case properties.origin
        when :local then @local_references.from_properties(properties) # must already exist
        when :remote then @remote_references.from_properties(properties, build: build, tentative: tentative)
        #when child ...
        end
      end
    end
def convert_properties_to_reference(properties, build: true, tentative: false)
      iterate_non_primitives(properties) do |properties|
        case properties.origin
        when :local then @local_references.from_properties(properties) # must already exist
        when :remote then @remote_references.from_properties(properties, build: build, tentative: tentative)
        #when child ...
        end
      end
    end
Converts properties to their references.
 Property sets with an +origin+ of +local+ are converted to {LocalReference}s and +remote+ to {RemoteReference}s.
 Primitives are unchanged.
 @param properties [::Array<::Array,::Boolean,::Exception,::Float,#origin#id,Hash,::Integer,nil,::String>]
 @param build [Boolean] build remote reference if an existing one does not exist already
 @param tentative [Boolean] allow remote reference to be quietly forgotten if rejected
 @raise [ProtocolError] if a local reference does not exist with received id
 @return [::Array<::Array,::Boolean,::Exception,::Float,Hash,::Integer,nil,Reference,::String>]