| # Protocol Buffers - Google's data interchange format |
| # Copyright 2023 Google Inc. All rights reserved. |
| # |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file or at |
| # https://developers.google.com/open-source/licenses/bsd |
| |
| require 'ffi-compiler/loader' |
| require 'google/protobuf/ffi/ffi' |
| require 'google/protobuf/ffi/internal/type_safety' |
| require 'google/protobuf/ffi/internal/pointer_helper' |
| require 'google/protobuf/ffi/internal/arena' |
| require 'google/protobuf/ffi/internal/convert' |
| require 'google/protobuf/ffi/descriptor' |
| require 'google/protobuf/ffi/enum_descriptor' |
| require 'google/protobuf/ffi/field_descriptor' |
| require 'google/protobuf/ffi/oneof_descriptor' |
| require 'google/protobuf/ffi/method_descriptor' |
| require 'google/protobuf/ffi/service_descriptor' |
| require 'google/protobuf/ffi/descriptor_pool' |
| require 'google/protobuf/ffi/file_descriptor' |
| require 'google/protobuf/ffi/map' |
| require 'google/protobuf/ffi/object_cache' |
| require 'google/protobuf/ffi/repeated_field' |
| require 'google/protobuf/ffi/message' |
| |
| module Google |
| module Protobuf |
| def self.deep_copy(object) |
| case object |
| when RepeatedField |
| RepeatedField.send(:deep_copy, object) |
| when Google::Protobuf::Map |
| Google::Protobuf::Map.deep_copy(object) |
| when Google::Protobuf::MessageExts |
| object.class.send(:deep_copy, object.instance_variable_get(:@msg)) |
| else |
| raise NotImplementedError |
| end |
| end |
| |
| def self.discard_unknown(message) |
| raise FrozenError if message.frozen? |
| raise ArgumentError.new "Expected message, got #{message.class} instead." if message.instance_variable_get(:@msg).nil? |
| unless Google::Protobuf::FFI.message_discard_unknown(message.instance_variable_get(:@msg), message.class.descriptor, 128) |
| raise RuntimeError.new "Messages nested too deeply." |
| end |
| nil |
| end |
| end |
| end |