• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Protocol Buffers - Google's data interchange format
2# Copyright 2023 Google Inc.  All rights reserved.
3#
4# Use of this source code is governed by a BSD-style
5# license that can be found in the LICENSE file or at
6# https://developers.google.com/open-source/licenses/bsd
7
8require 'ffi-compiler/loader'
9require 'google/protobuf/ffi/ffi'
10require 'google/protobuf/ffi/internal/type_safety'
11require 'google/protobuf/ffi/internal/pointer_helper'
12require 'google/protobuf/ffi/internal/arena'
13require 'google/protobuf/ffi/internal/convert'
14require 'google/protobuf/ffi/descriptor'
15require 'google/protobuf/ffi/enum_descriptor'
16require 'google/protobuf/ffi/field_descriptor'
17require 'google/protobuf/ffi/oneof_descriptor'
18require 'google/protobuf/ffi/method_descriptor'
19require 'google/protobuf/ffi/service_descriptor'
20require 'google/protobuf/ffi/descriptor_pool'
21require 'google/protobuf/ffi/file_descriptor'
22require 'google/protobuf/ffi/map'
23require 'google/protobuf/ffi/object_cache'
24require 'google/protobuf/ffi/repeated_field'
25require 'google/protobuf/ffi/message'
26
27module Google
28  module Protobuf
29    def self.deep_copy(object)
30      case object
31      when RepeatedField
32        RepeatedField.send(:deep_copy, object)
33      when Google::Protobuf::Map
34        Google::Protobuf::Map.deep_copy(object)
35      when Google::Protobuf::MessageExts
36        object.class.send(:deep_copy, object.instance_variable_get(:@msg))
37      else
38        raise NotImplementedError
39      end
40    end
41
42    def self.discard_unknown(message)
43      raise FrozenError if message.frozen?
44      raise ArgumentError.new "Expected message, got #{message.class} instead." if message.instance_variable_get(:@msg).nil?
45      unless Google::Protobuf::FFI.message_discard_unknown(message.instance_variable_get(:@msg), message.class.descriptor, 128)
46        raise RuntimeError.new "Messages nested too deeply."
47      end
48      nil
49    end
50  end
51end
52