code: private OptionKindAndValue readKindAndValue() {
      char peeked = peekChar();
      switch (peeked) {
        case '{':
          return OptionKindAndValue.of(OptionElement.Kind.MAP, readMap('{', '}', ':'));
        case '[':
          return OptionKindAndValue.of(OptionElement.Kind.LIST, readList());
        case '"':
          return OptionKindAndValue.of(OptionElement.Kind.STRING, readString());
        default:
          if (Character.isDigit(peeked) || peeked == '-') {
            return OptionKindAndValue.of(OptionElement.Kind.NUMBER, readWord());
          }
          String word = readWord();
          switch (word) {
            case "true":
              return OptionKindAndValue.of(OptionElement.Kind.BOOLEAN, "true");
            case "false":
              return OptionKindAndValue.of(OptionElement.Kind.BOOLEAN, "false");
            default:
              return OptionKindAndValue.of(OptionElement.Kind.ENUM, word);
          }
      }
    }
docs: Reads a value that can be a map, list, string, number, boolean or enum.