1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Keep this file in sync with entry_kernel.h.
6
7 #include "sync/syncable/syncable_enum_conversions.h"
8
9 #include "base/basictypes.h"
10 #include "base/logging.h"
11
12 namespace syncer {
13 namespace syncable {
14
15 // We can't tokenize expected_min/expected_max since it can be a
16 // general expression.
17 #define ASSERT_ENUM_BOUNDS(enum_min, enum_max, expected_min, expected_max) \
18 COMPILE_ASSERT(static_cast<int>(enum_min) == \
19 static_cast<int>(expected_min), \
20 enum_min##_not_expected_min); \
21 COMPILE_ASSERT(static_cast<int>(enum_max) == \
22 static_cast<int>(expected_max), \
23 enum_max##_not_expected_max);
24
25 #define ENUM_CASE(enum_value) case enum_value: return #enum_value
26
GetMetahandleFieldString(MetahandleField metahandle_field)27 const char* GetMetahandleFieldString(MetahandleField metahandle_field) {
28 ASSERT_ENUM_BOUNDS(META_HANDLE, META_HANDLE,
29 INT64_FIELDS_BEGIN, BASE_VERSION - 1);
30 switch (metahandle_field) {
31 ENUM_CASE(META_HANDLE);
32 }
33 NOTREACHED();
34 return "";
35 }
36
GetBaseVersionString(BaseVersion base_version)37 const char* GetBaseVersionString(BaseVersion base_version) {
38 ASSERT_ENUM_BOUNDS(BASE_VERSION, BASE_VERSION,
39 META_HANDLE + 1, SERVER_VERSION - 1);
40 switch (base_version) {
41 ENUM_CASE(BASE_VERSION);
42 }
43 NOTREACHED();
44 return "";
45 }
46
GetInt64FieldString(Int64Field int64_field)47 const char* GetInt64FieldString(Int64Field int64_field) {
48 ASSERT_ENUM_BOUNDS(SERVER_VERSION, TRANSACTION_VERSION,
49 BASE_VERSION + 1, INT64_FIELDS_END - 1);
50 switch (int64_field) {
51 ENUM_CASE(SERVER_VERSION);
52 ENUM_CASE(LOCAL_EXTERNAL_ID);
53 ENUM_CASE(TRANSACTION_VERSION);
54 case INT64_FIELDS_END: break;
55 }
56 NOTREACHED();
57 return "";
58 }
59
GetTimeFieldString(TimeField time_field)60 const char* GetTimeFieldString(TimeField time_field) {
61 ASSERT_ENUM_BOUNDS(MTIME, SERVER_CTIME,
62 TIME_FIELDS_BEGIN, TIME_FIELDS_END - 1);
63 switch (time_field) {
64 ENUM_CASE(MTIME);
65 ENUM_CASE(SERVER_MTIME);
66 ENUM_CASE(CTIME);
67 ENUM_CASE(SERVER_CTIME);
68 case TIME_FIELDS_END: break;
69 }
70 NOTREACHED();
71 return "";
72 }
73
GetIdFieldString(IdField id_field)74 const char* GetIdFieldString(IdField id_field) {
75 ASSERT_ENUM_BOUNDS(ID, SERVER_PARENT_ID,
76 ID_FIELDS_BEGIN, ID_FIELDS_END - 1);
77 switch (id_field) {
78 ENUM_CASE(ID);
79 ENUM_CASE(PARENT_ID);
80 ENUM_CASE(SERVER_PARENT_ID);
81 case ID_FIELDS_END: break;
82 }
83 NOTREACHED();
84 return "";
85 }
86
GetIndexedBitFieldString(IndexedBitField indexed_bit_field)87 const char* GetIndexedBitFieldString(IndexedBitField indexed_bit_field) {
88 ASSERT_ENUM_BOUNDS(IS_UNSYNCED, IS_UNAPPLIED_UPDATE,
89 BIT_FIELDS_BEGIN, INDEXED_BIT_FIELDS_END - 1);
90 switch (indexed_bit_field) {
91 ENUM_CASE(IS_UNSYNCED);
92 ENUM_CASE(IS_UNAPPLIED_UPDATE);
93 case INDEXED_BIT_FIELDS_END: break;
94 }
95 NOTREACHED();
96 return "";
97 }
98
GetIsDelFieldString(IsDelField is_del_field)99 const char* GetIsDelFieldString(IsDelField is_del_field) {
100 ASSERT_ENUM_BOUNDS(IS_DEL, IS_DEL,
101 INDEXED_BIT_FIELDS_END, IS_DIR - 1);
102 switch (is_del_field) {
103 ENUM_CASE(IS_DEL);
104 }
105 NOTREACHED();
106 return "";
107 }
108
GetBitFieldString(BitField bit_field)109 const char* GetBitFieldString(BitField bit_field) {
110 ASSERT_ENUM_BOUNDS(IS_DIR, SERVER_IS_DEL,
111 IS_DEL + 1, BIT_FIELDS_END - 1);
112 switch (bit_field) {
113 ENUM_CASE(IS_DIR);
114 ENUM_CASE(SERVER_IS_DIR);
115 ENUM_CASE(SERVER_IS_DEL);
116 case BIT_FIELDS_END: break;
117 }
118 NOTREACHED();
119 return "";
120 }
121
GetStringFieldString(StringField string_field)122 const char* GetStringFieldString(StringField string_field) {
123 ASSERT_ENUM_BOUNDS(NON_UNIQUE_NAME, UNIQUE_BOOKMARK_TAG,
124 STRING_FIELDS_BEGIN, STRING_FIELDS_END - 1);
125 switch (string_field) {
126 ENUM_CASE(NON_UNIQUE_NAME);
127 ENUM_CASE(SERVER_NON_UNIQUE_NAME);
128 ENUM_CASE(UNIQUE_SERVER_TAG);
129 ENUM_CASE(UNIQUE_CLIENT_TAG);
130 ENUM_CASE(UNIQUE_BOOKMARK_TAG);
131 case STRING_FIELDS_END: break;
132 }
133 NOTREACHED();
134 return "";
135 }
136
GetProtoFieldString(ProtoField proto_field)137 const char* GetProtoFieldString(ProtoField proto_field) {
138 ASSERT_ENUM_BOUNDS(SPECIFICS, BASE_SERVER_SPECIFICS,
139 PROTO_FIELDS_BEGIN, PROTO_FIELDS_END - 1);
140 switch (proto_field) {
141 ENUM_CASE(SPECIFICS);
142 ENUM_CASE(SERVER_SPECIFICS);
143 ENUM_CASE(BASE_SERVER_SPECIFICS);
144 case PROTO_FIELDS_END: break;
145 }
146 NOTREACHED();
147 return "";
148 }
149
GetUniquePositionFieldString(UniquePositionField position_field)150 const char* GetUniquePositionFieldString(UniquePositionField position_field) {
151 ASSERT_ENUM_BOUNDS(SERVER_UNIQUE_POSITION, UNIQUE_POSITION,
152 UNIQUE_POSITION_FIELDS_BEGIN,
153 UNIQUE_POSITION_FIELDS_END - 1);
154 switch(position_field) {
155 ENUM_CASE(SERVER_UNIQUE_POSITION);
156 ENUM_CASE(UNIQUE_POSITION);
157 case UNIQUE_POSITION_FIELDS_END: break;
158 }
159 NOTREACHED();
160 return "";
161 }
162
GetAttachmentMetadataFieldString(AttachmentMetadataField attachment_metadata_field)163 const char* GetAttachmentMetadataFieldString(
164 AttachmentMetadataField attachment_metadata_field) {
165 ASSERT_ENUM_BOUNDS(ATTACHMENT_METADATA,
166 SERVER_ATTACHMENT_METADATA,
167 ATTACHMENT_METADATA_FIELDS_BEGIN,
168 ATTACHMENT_METADATA_FIELDS_END - 1);
169 switch(attachment_metadata_field) {
170 ENUM_CASE(ATTACHMENT_METADATA);
171 ENUM_CASE(SERVER_ATTACHMENT_METADATA);
172 case ATTACHMENT_METADATA_FIELDS_END: break;
173 }
174 NOTREACHED();
175 return "";
176 }
177
GetBitTempString(BitTemp bit_temp)178 const char* GetBitTempString(BitTemp bit_temp) {
179 ASSERT_ENUM_BOUNDS(SYNCING, SYNCING,
180 BIT_TEMPS_BEGIN, BIT_TEMPS_END - 1);
181 switch (bit_temp) {
182 ENUM_CASE(SYNCING);
183 case BIT_TEMPS_END: break;
184 }
185 NOTREACHED();
186 return "";
187 }
188
189 #undef ENUM_CASE
190 #undef ASSERT_ENUM_BOUNDS
191
192 } // namespace syncable
193 } // namespace syncer
194