// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The proto definition for JSON format has been written based on
// http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

syntax = "proto2";

package json_proto;

message JsonObject {
  required string name = 1;
  required JsonValue value = 2;
}

message JsonValue {
  oneof value {
    // Json value types:

    // null: null, will be used when 'oneof' contains nothing

    // object: another json object of any type
    JsonObject object_value = 1;

    // array: an array of values
    ArrayValue array_value = 2;

    // number: can be an integer, a float, an exponent
    NumberValue number_value = 3;

    // string: unicode string
    StringValue string_value = 4;

    // boolean: true or talse
    BooleanValue boolean_value = 5;
  }
}

message ArrayValue {
  repeated JsonValue value = 1;
}

message NumberInteger {
  required int64 value = 1;
}

message NumberFloat {
  required double value = 1;
}

message NumberExponent {
  required int32 base = 1;
  required int32 exponent = 2;
  required bool use_uppercase = 3;
}

message NumberExponentFrac {
  required float base = 1;
  required int32 exponent = 2;
  required bool use_uppercase = 3;
}

message NumberValue {
  required NumberInteger integer_value = 1;

  // integer_value is used when oneof field below has nothing.
  oneof value {
    NumberFloat float_value = 2;
    NumberExponent exponent_value = 3;
    NumberExponentFrac exponent_frac_value = 4;
  }
}

message StringValue {
  required string value = 1;
}

message BooleanValue {
  required bool value = 1;
}
