// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

import "google/protobuf/wrappers.proto";

package testdata;
option go_package = "cloud.google.com/go/bigquery/storage/managedwriter/testdata";


enum Proto3ExampleEnum {
        P3_UNDEFINED = 0;
        P3_THING = 1;
        P3_OTHER_THING = 2;
        P3_THIRD_THING = 3;
}

// Validation message in proto3 syntax with default value behavior.
message ValidationP3Defaults {
    double double_field = 1;
    float float_field = 2;
    int32 int32_field = 3;
    int64 int64_field = 4;
    uint32 uint32_field = 5;
    //uint64 uint64_field = 6;  
    sint32 sint32_field = 7;
    sint64 sint64_field = 8;
    fixed32 fixed32_field = 9;
    //fixed64 fixed64_field = 10;
    sfixed32 sfixed32_field = 11;
    sfixed64 sfixed64_field = 12;
    bool bool_field = 13;
    string string_field = 14;
    bytes bytes_field = 15;
    Proto3ExampleEnum enum_field = 16;
}

// Validation message in proto2 syntax with field presence via optional keyword.
message ValidationP3Optional {
    optional double double_field = 1;
    optional float float_field = 2;
    optional int32 int32_field = 3;
    optional int64 int64_field = 4;
    optional uint32 uint32_field = 5;
    //optional uint64 uint64_field = 6;
    optional sint32 sint32_field = 7;
    optional sint64 sint64_field = 8;
    optional fixed32 fixed32_field = 9;
    //optional fixed64 fixed64_field = 10;
    optional sfixed32 sfixed32_field = 11;
    optional sfixed64 sfixed64_field = 12;
    optional bool bool_field = 13;
    optional string string_field = 14;
    optional bytes bytes_field = 15;
    optional Proto3ExampleEnum enum_field = 16;
}

// Validation message in proto2 syntax with all well-known
// wraper types.
// Note: There are no well-known sint/fixed/sfixed.
message ValidationP3Wrappers {
    google.protobuf.DoubleValue double_field = 1;
    google.protobuf.FloatValue float_field = 2;
    google.protobuf.Int32Value int32_field = 3;
    google.protobuf.Int64Value int64_field = 4;
    google.protobuf.UInt32Value uint32_field = 5;
    //google.protobuf.UInt64Value uint64_field = 6;
    sint32 sint32_field = 7;
    sint64 sint64_field = 8;
    fixed32 fixed32_field = 9;
    //fixed64 fixed64_field = 10;
    sfixed32 sfixed32_field = 11;
    sfixed64 sfixed64_field = 12;
    google.protobuf.BoolValue bool_field = 13;
    google.protobuf.StringValue string_field = 14;
    google.protobuf.BytesValue bytes_field = 15;
    Proto3ExampleEnum enum_field = 16;
}

// Validating the behavior of packed repeated scalar values.
// Proto3 behavior is to pack values by default.
message ValidationP3PackedRepeated {
    optional int64 id = 1;
    repeated double double_repeated = 2;
    repeated float float_repeated = 3;
    repeated int32 int32_repeated = 4;
    repeated int64 int64_repeated = 5;
    repeated uint32 uint32_repeated = 6;
    repeated sint32 sint32_repeated = 7;
    repeated sint64 sint64_repeated = 8;
    repeated fixed32 fixed32_repeated = 9;
    repeated sfixed32 sfixed32_repeated = 10;
    repeated sfixed64 sfixed64_repeated = 11;
    repeated bool bool_repeated = 12;
    repeated Proto3ExampleEnum enum_repeated = 13;
}
