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
31syntax = "proto3";
32
33package google.protobuf;
34
35option csharp_namespace = "Google.Protobuf.WellKnownTypes";
36option cc_enable_arenas = true;
37option go_package = "google.golang.org/protobuf/types/known/structpb";
38option java_package = "com.google.protobuf";
39option java_outer_classname = "StructProto";
40option java_multiple_files = true;
41option objc_class_prefix = "GPB";
42
43// `Struct` represents a structured data value, consisting of fields
44// which map to dynamically typed values. In some languages, `Struct`
45// might be supported by a native representation. For example, in
46// scripting languages like JS a struct is represented as an
47// object. The details of that representation are described together
48// with the proto support for the language.
49//
50// The JSON representation for `Struct` is JSON object.
51message Struct {
52  // Unordered map of dynamically typed values.
53  map<string, Value> fields = 1;
54}
55
56// `Value` represents a dynamically typed value which can be either
57// null, a number, a string, a boolean, a recursive struct value, or a
58// list of values. A producer of value is expected to set one of that
59// variants, absence of any variant indicates an error.
60//
61// The JSON representation for `Value` is JSON value.
62message Value {
63  // The kind of value.
64  oneof kind {
65    // Represents a null value.
66    NullValue null_value = 1;
67    // Represents a double value.
68    double number_value = 2;
69    // Represents a string value.
70    string string_value = 3;
71    // Represents a boolean value.
72    bool bool_value = 4;
73    // Represents a structured value.
74    Struct struct_value = 5;
75    // Represents a repeated `Value`.
76    ListValue list_value = 6;
77  }
78}
79
80// `NullValue` is a singleton enumeration to represent the null value for the
81// `Value` type union.
82//
83//  The JSON representation for `NullValue` is JSON `null`.
84enum NullValue {
85  // Null value.
86  NULL_VALUE = 0;
87}
88
89// `ListValue` is a wrapper around a repeated field of values.
90//
91// The JSON representation for `ListValue` is JSON array.
92message ListValue {
93  // Repeated field of dynamically typed values.
94  repeated Value values = 1;
95}
96