// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

class JsonParsingContext {
  // A list of indices into maps and lists pointing to the current root.
  final List<String> _path = <String>[];
  final bool ignoreUnknownFields;
  final bool supportNamesWithUnderscores;
  final bool permissiveEnums;

  JsonParsingContext(this.ignoreUnknownFields, this.supportNamesWithUnderscores,
      this.permissiveEnums);

  void addMapIndex(String index) {
    _path.add(index);
  }

  void addListIndex(int index) {
    _path.add(index.toString());
  }

  void popIndex() {
    _path.removeLast();
  }

  /// Returns a FormatException indicating the indices to the current [path].
  Exception parseException(String message, Object source) {
    var formattedPath = _path.map((s) => '[\"$s\"]').join();
    return FormatException(
        'Protobuf JSON decoding failed at: root$formattedPath. $message',
        source);
  }
}
