global

def build_property(value, disposition: nil, key: nil, record: nil, path: nil, context: nil)

def build_property(value, disposition: nil, key: nil, record: nil, path: nil, context: nil)
  format = disposition ? 'binary' : infer_format(key, record)
  enum = infer_enum(path, record, context)
  property = build_type(value, format: format, enum: enum)
  case value
  when Array
    property[:items] = if value.empty?
                         {} # unknown
                       else
                         build_array_items_schema(value, record: record, path: path, context: context)
                       end
  when Hash
    property[:properties] = {}.tap do |properties|
      value.each do |k, v|
        child_path = path ? "#{path}.#{k}" : k.to_s
        properties[k] = build_property(v, record: record, key: k, path: child_path, context: context)
      end
    end
    property = enrich_with_required_keys(property)
  end
  property
end