Coverage Report

Created: 2023-11-12 09:30

/proc/self/cwd/external/com_google_protobuf/src/google/protobuf/any.cc
Line
Count
Source
1
// Protocol Buffers - Google's data interchange format
2
// Copyright 2008 Google Inc.  All rights reserved.
3
// https://developers.google.com/protocol-buffers/
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
//     * Redistributions of source code must retain the above copyright
10
// notice, this list of conditions and the following disclaimer.
11
//     * Redistributions in binary form must reproduce the above
12
// copyright notice, this list of conditions and the following disclaimer
13
// in the documentation and/or other materials provided with the
14
// distribution.
15
//     * Neither the name of Google Inc. nor the names of its
16
// contributors may be used to endorse or promote products derived from
17
// this software without specific prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31
#include "google/protobuf/any.h"
32
33
#include "google/protobuf/arenastring.h"
34
#include "google/protobuf/descriptor.h"
35
#include "google/protobuf/generated_message_util.h"
36
#include "google/protobuf/message.h"
37
38
// Must be included last.
39
#include "google/protobuf/port_def.inc"
40
41
namespace google {
42
namespace protobuf {
43
namespace internal {
44
45
76.7k
bool AnyMetadata::PackFrom(Arena* arena, const Message& message) {
46
76.7k
  return PackFrom(arena, message, kTypeGoogleApisComPrefix);
47
76.7k
}
48
49
bool AnyMetadata::PackFrom(Arena* arena, const Message& message,
50
76.7k
                           absl::string_view type_url_prefix) {
51
76.7k
  type_url_->Set(
52
76.7k
      GetTypeUrl(message.GetDescriptor()->full_name(), type_url_prefix), arena);
53
76.7k
  return message.SerializeToString(value_->Mutable(arena));
54
76.7k
}
55
56
211k
bool AnyMetadata::UnpackTo(Message* message) const {
57
211k
  if (!InternalIs(message->GetDescriptor()->full_name())) {
58
26
    return false;
59
26
  }
60
211k
  return message->ParseFromString(value_->Get());
61
211k
}
62
63
bool GetAnyFieldDescriptors(const Message& message,
64
                            const FieldDescriptor** type_url_field,
65
15.4M
                            const FieldDescriptor** value_field) {
66
15.4M
  const Descriptor* descriptor = message.GetDescriptor();
67
15.4M
  if (descriptor->full_name() != kAnyFullTypeName) {
68
15.1M
    return false;
69
15.1M
  }
70
342k
  *type_url_field = descriptor->FindFieldByNumber(1);
71
342k
  *value_field = descriptor->FindFieldByNumber(2);
72
342k
  return (*type_url_field != nullptr &&
73
342k
          (*type_url_field)->type() == FieldDescriptor::TYPE_STRING &&
74
342k
          *value_field != nullptr &&
75
342k
          (*value_field)->type() == FieldDescriptor::TYPE_BYTES);
76
15.4M
}
77
78
}  // namespace internal
79
}  // namespace protobuf
80
}  // namespace google
81
82
#include "google/protobuf/port_undef.inc"