On Wednesday, May 6, 2015 at 3:53:03 PM UTC-4, Henner Zeller wrote:
>
> On 6 May 2015 at 06:29, rhlake <[email protected] <javascript:>> wrote:
>
>> I have the following message definition in a proto file which is causing
>> a *serialization error*:
>>
>>
>> message Request {
>>
>> repeated LanguageType LanguageList = 1;
>> }
>>
>>
>> enum LanguageType {
>>
>> English = 0;
>> German = 1;
>> Spanish = 2;
>> }
>>
>>
>> *If I make the following change:*
>>
>>
>> message Request {
>>
>> repeated LanguageTypeList
>> LanguageListParam = 1;
>> }
>>
>>
>> message LanguageTypeList {
>>
>> optional LanguageType LanguageList = 1;
>> }
>>
>> enum LanguageType {
>>
>> English = 0;
>> German = 1;
>> Spanish = 2;
>> }
>>
>>
>> can anyone explain what is happening? does *repeated* *NOT WORK* with*
>> enums*?
>>
>
> Repeated does work with enums.
>
> Can you give a bit more context, e.g. what is the language you are
> creating code for, and what exactly does the "serialization error" manifest
> (error message or error code).
>
> How do you serialize and deserialize the data ? A common problem is to not
> deal with NUL bytes properly in the stream, i.e. if you interpret something
> as a NUL-terminated C-string somewhere in the process it might look like a
> too short buffer.
>
> -h
>
Version: C++ / 2.5.0 version
Error:
1. level_ LOGLEVEL_FATAL (3)
google::protobuf::LogLevel
2. filename_ "d:\\svn\\lg_radiosimulator\\01.
src\\gpb_lib\\src\\component\\protocal\\src\\google\\protobuf\\repeated_field.h"
3. line_ 625
4. message_ "CHECK failed: (index) < (size())
Trace:
1. GeneratedMessageReflection::SetRepeatedEnum
2. void GeneratedMessageReflection::SetRepeatedEnum(
3. Message* message,
4. const FieldDescriptor* field, int index,
5. const EnumValueDescriptor* value) const {
6. USAGE_CHECK_ALL(SetRepeatedEnum, REPEATED, ENUM);
7. USAGE_CHECK_ENUM_VALUE(SetRepeatedEnum);
8. if (field->is_extension()) {
MutableExtensionSet(message)->SetRepeatedEnum(
9. field->number(), index, value->number());
10. } else {
11. SetRepeatedField<int>(message, field, index,
value->number()); ß----
12. }
template <typename Type>
inline void GeneratedMessageReflection::SetRepeatedField(
Message* message, const FieldDescriptor* field,
int index, Type value) const {
MutableRaw<RepeatedField<Type> >(message, field)->Set(index, value); ß---
Set.
}
template <typename Element>
inline void RepeatedField<Element>::Set(int index, const Element& value) {
GOOGLE_DCHECK_LT(index, size());
ß---- Error happens.
elements_[index] = value;
Thank You
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.