tools: MimeDump<> can have all static members
[barry.git] / src / s11n-boost.h
blob3654d7a904caea24b3936af52d9ceb5a68a7b99d
1 ///
2 /// \file s11n-boost.h
3 /// Non-intrusive versions of serialization functions for the
4 /// record classes. These template functions make it possible
5 /// to use the record classes with the Boost::Serialization
6 /// library.
7 ///
9 /*
10 Copyright (C) 2005-2010, Net Direct Inc. (http://www.netdirect.ca/)
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU General Public License in the COPYING file at the
22 root directory of this project for more details.
25 #ifndef __BARRY_S11N_BOOST_H__
26 #define __BARRY_S11N_BOOST_H__
28 #include "record.h"
29 #include <boost/serialization/vector.hpp>
31 ///////////////////////////////////////////////////////////////////////////////
32 // special versions
34 // BARRY_BASE_S11N_VERSION - the base version where all record data is
35 // stored so it can be fully retrieved and
36 // uploaded to the handheld device later.
37 // BARRY_POD_MAP_VERSION - if these templates are called with a version
38 // equal or greater than this, only mappable,
39 // POD data is included in the serialization
41 #define BARRY_BASE_S11N_VERSION 0
42 #define BARRY_POD_MAP_VERSION 1000
44 // namespace boost::serialization, for the non-intrusive version
45 namespace boost {
46 namespace serialization {
48 template <class ArchiveT>
49 void serialize(ArchiveT &ar, Barry::UnknownField &uf, const unsigned int ver)
51 ar & make_nvp("type", uf.type);
52 ar & make_nvp("data", uf.data.raw_data);
55 template <class ArchiveT>
56 void serialize(ArchiveT &ar, Barry::Contact::GroupLink &g, const unsigned int ver)
58 ar & make_nvp("Link", g.Link);
59 ar & make_nvp("Unknown", g.Unknown);
62 template <class ArchiveT>
63 void serialize(ArchiveT &ar, Barry::CategoryList &cl, const unsigned int ver)
65 std::vector<std::string> &sl = cl;
66 ar & make_nvp("CategoryList", sl);
69 template <class ArchiveT>
70 void serialize(ArchiveT &ar, Barry::Contact &c, const unsigned int ver)
72 ar & make_nvp("RecType", c.RecType);
73 ar & make_nvp("RecordId", c.RecordId);
75 ar & make_nvp("EmailAddresses", c.EmailAddresses);
76 ar & make_nvp("Phone", c.Phone);
77 ar & make_nvp("Fax", c.Fax);
78 ar & make_nvp("WorkPhone", c.WorkPhone);
79 ar & make_nvp("HomePhone", c.HomePhone);
80 ar & make_nvp("MobilePhone", c.MobilePhone);
81 ar & make_nvp("Pager", c.Pager);
82 ar & make_nvp("PIN", c.PIN);
83 ar & make_nvp("Radio", c.Radio);
84 ar & make_nvp("WorkPhone2", c.WorkPhone2);
85 ar & make_nvp("HomePhone2", c.HomePhone2);
86 ar & make_nvp("OtherPhone", c.OtherPhone);
87 ar & make_nvp("FirstName", c.FirstName);
88 ar & make_nvp("LastName", c.LastName);
89 ar & make_nvp("Company", c.Company);
90 ar & make_nvp("DefaultCommunicationsMethod", c.DefaultCommunicationsMethod);
91 ar & make_nvp("Address1", c.WorkAddress.Address1);
92 ar & make_nvp("Address2", c.WorkAddress.Address2);
93 ar & make_nvp("Address3", c.WorkAddress.Address3);
94 ar & make_nvp("City", c.WorkAddress.City);
95 ar & make_nvp("Province", c.WorkAddress.Province);
96 ar & make_nvp("PostalCode", c.WorkAddress.PostalCode);
97 ar & make_nvp("Country", c.WorkAddress.Country);
98 ar & make_nvp("JobTitle", c.JobTitle);
99 ar & make_nvp("PublicKey", c.PublicKey);
100 ar & make_nvp("URL", c.URL);
101 ar & make_nvp("Prefix", c.Prefix);
102 ar & make_nvp("Categories", c.Categories);
103 ar & make_nvp("HomeAddress1", c.HomeAddress.Address1);
104 ar & make_nvp("HomeAddress2", c.HomeAddress.Address2);
105 ar & make_nvp("HomeAddress3", c.HomeAddress.Address3);
106 ar & make_nvp("Notes", c.Notes);
107 ar & make_nvp("UserDefined1", c.UserDefined1);
108 ar & make_nvp("UserDefined2", c.UserDefined2);
109 ar & make_nvp("UserDefined3", c.UserDefined3);
110 ar & make_nvp("UserDefined4", c.UserDefined4);
111 ar & make_nvp("HomeCity", c.HomeAddress.City);
112 ar & make_nvp("HomeProvince", c.HomeAddress.Province);
113 ar & make_nvp("HomePostalCode", c.HomeAddress.PostalCode);
114 ar & make_nvp("HomeCountry", c.HomeAddress.Country);
115 ar & make_nvp("Image", c.Image);
117 if( ver < BARRY_POD_MAP_VERSION ) {
118 ar & make_nvp("GroupLinks", c.GroupLinks);
119 ar & make_nvp("Unknowns", c.Unknowns);
123 template <class ArchiveT>
124 void serialize(ArchiveT &ar, Barry::EmailAddress &a, const unsigned int ver)
126 ar & make_nvp("Name", a.Name);
127 ar & make_nvp("Email", a.Email);
130 template <class ArchiveT>
131 void serialize(ArchiveT &ar, Barry::Message &m, const unsigned int ver)
133 ar & make_nvp("From", m.From);
134 ar & make_nvp("To", m.To);
135 ar & make_nvp("Cc", m.Cc);
136 ar & make_nvp("Sender", m.Sender);
137 ar & make_nvp("ReplyTo", m.ReplyTo);
138 ar & make_nvp("Subject", m.Subject);
139 ar & make_nvp("Body", m.Body);
140 ar & make_nvp("Attachment", m.Attachment);
141 ar & make_nvp("MessageRecordId", m.MessageRecordId);
142 ar & make_nvp("MessageReplyTo", m.MessageReplyTo);
143 ar & make_nvp("MessageDateSent", m.MessageDateSent);
144 ar & make_nvp("MessageDateReceived", m.MessageDateReceived);
146 ar & make_nvp("MessageTruncated", m.MessageTruncated);
147 ar & make_nvp("MessageRead", m.MessageRead);
148 ar & make_nvp("MessageReply", m.MessageReply);
149 ar & make_nvp("MessageSaved", m.MessageSaved);
150 ar & make_nvp("MessageSavedDeleted", m.MessageSavedDeleted);
152 ar & make_nvp("MessagePriority", m.Priority);
153 ar & make_nvp("MessageSensitivity", m.Sensitivity);
155 if( ver < BARRY_POD_MAP_VERSION ) {
156 ar & make_nvp("Unknowns", m.Unknowns);
160 template <class ArchiveT>
161 void serialize(ArchiveT &ar, Barry::Calendar &c, const unsigned int ver)
163 ar & make_nvp("RecType", c.RecType);
164 ar & make_nvp("RecordId", c.RecordId);
166 ar & make_nvp("AllDayEvent", c.AllDayEvent);
168 ar & make_nvp("Subject", c.Subject);
169 ar & make_nvp("Notes", c.Notes);
170 ar & make_nvp("Location", c.Location);
172 ar & make_nvp("NotificationTime", c.NotificationTime);
173 ar & make_nvp("StartTime", c.StartTime);
174 ar & make_nvp("EndTime", c.EndTime);
176 ar & make_nvp("Organizer", c.Organizer);
177 ar & make_nvp("AcceptedBy", c.AcceptedBy);
178 ar & make_nvp("Invited", c.Invited);
180 ar & make_nvp("FreeBusyFlag", c.FreeBusyFlag);
181 ar & make_nvp("ClassFlag", c.ClassFlag);
183 ar & make_nvp("Recurring", c.Recurring);
184 ar & make_nvp("RecurringType", c.RecurringType);
185 ar & make_nvp("Interval", c.Interval);
186 ar & make_nvp("RecurringEndTime", c.RecurringEndTime);
187 ar & make_nvp("Perpetual", c.Perpetual);
188 ar & make_nvp("CalendarID", c.CalendarID);
189 ar & make_nvp("TimeZoneCode", c.TimeZoneCode);
190 ar & make_nvp("TimeZoneValid", c.TimeZoneValid);
192 ar & make_nvp("DayOfWeek", c.DayOfWeek);
193 ar & make_nvp("WeekOfMonth", c.WeekOfMonth);
194 ar & make_nvp("DayOfMonth", c.DayOfMonth);
195 ar & make_nvp("MonthOfYear", c.MonthOfYear);
196 ar & make_nvp("WeekDays", c.WeekDays);
198 if( ver < BARRY_POD_MAP_VERSION ) {
199 ar & make_nvp("Unknowns", c.Unknowns);
203 template <class ArchiveT>
204 void serialize(ArchiveT &ar, Barry::CalendarAll &c, const unsigned int ver)
206 serialize(ar, static_cast<Barry::Calendar&>(c), ver);
208 ar & make_nvp("MailAccount", c.MailAccount);
211 template <class ArchiveT>
212 void serialize(ArchiveT &ar, Barry::CallLog &c, const unsigned int ver)
214 ar & make_nvp("RecType", c.RecType);
215 ar & make_nvp("RecordId", c.RecordId);
217 ar & make_nvp("Duration", c.Duration);
218 ar & make_nvp("Timestamp", c.Timestamp);
219 ar & make_nvp("ContactName", c.ContactName);
220 ar & make_nvp("PhoneNumber", c.PhoneNumber);
222 ar & make_nvp("DirectionFlag", c.DirectionFlag);
223 ar & make_nvp("StatusFlag", c.StatusFlag);
224 ar & make_nvp("PhoneTypeFlag", c.PhoneTypeFlag);
225 ar & make_nvp("PhoneInfoFlag", c.PhoneInfoFlag);
227 if( ver < BARRY_POD_MAP_VERSION ) {
228 ar & make_nvp("Unknowns", c.Unknowns);
232 template <class ArchiveT>
233 void serialize(ArchiveT &ar, Barry::Bookmark &c, const unsigned int ver)
235 ar & make_nvp("RecType", c.RecType);
236 ar & make_nvp("RecordId", c.RecordId);
237 ar & make_nvp("Index", c.Index);
239 ar & make_nvp("Name", c.Name);
240 ar & make_nvp("Icon", c.Icon);
241 ar & make_nvp("Url", c.Url);
243 ar & make_nvp("BrowserIdentity", c.BrowserIdentity);
244 ar & make_nvp("DisplayMode", c.DisplayMode);
245 ar & make_nvp("JavaScriptMode", c.JavaScriptMode);
247 if( ver < BARRY_POD_MAP_VERSION ) {
248 ar & make_nvp("Unknowns", c.Unknowns);
252 template <class ArchiveT>
253 void serialize(ArchiveT &ar, Barry::ServiceBookConfig &c, const unsigned int ver)
255 ar & make_nvp("Format", c.Format);
257 if( ver < BARRY_POD_MAP_VERSION ) {
258 ar & make_nvp("Unknowns", c.Unknowns);
262 template <class ArchiveT>
263 void serialize(ArchiveT &ar, Barry::ServiceBook &c, const unsigned int ver)
265 ar & make_nvp("RecType", c.RecType);
266 ar & make_nvp("RecordId", c.RecordId);
268 ar & make_nvp("Name", c.Name);
269 ar & make_nvp("HiddenName", c.HiddenName);
270 ar & make_nvp("Description", c.Description);
271 ar & make_nvp("DSID", c.DSID);
272 ar & make_nvp("BesDomain", c.BesDomain);
273 ar & make_nvp("UniqueId", c.UniqueId);
274 ar & make_nvp("ContentId", c.ContentId);
275 ar & make_nvp("Config", c.Config);
277 if( ver < BARRY_POD_MAP_VERSION ) {
278 ar & make_nvp("Unknowns", c.Unknowns);
282 template <class ArchiveT>
283 void serialize(ArchiveT &ar, Barry::Memo &m, const unsigned int ver)
285 ar & make_nvp("RecType", m.RecType);
286 ar & make_nvp("RecordId", m.RecordId);
288 ar & make_nvp("Title", m.Title);
289 ar & make_nvp("Body", m.Body);
290 ar & make_nvp("Categories", m.Categories);
292 if( ver < BARRY_POD_MAP_VERSION ) {
293 ar & make_nvp( "Unknowns", m.Unknowns);
297 template <class ArchiveT>
298 void serialize(ArchiveT &ar, Barry::Task &t, const unsigned int ver)
300 ar & make_nvp("RecType", t.RecType);
301 ar & make_nvp("RecordId", t.RecordId);
303 ar & make_nvp("Summary", t.Summary);
304 ar & make_nvp("Notes", t.Notes);
305 ar & make_nvp("Categories", t.Categories);
306 ar & make_nvp("UID", t.UID);
308 ar & make_nvp("StartTime", t.StartTime);
309 ar & make_nvp("DueTime", t.DueTime);
310 ar & make_nvp("AlarmTime", t.AlarmTime);
312 ar & make_nvp("TimeZoneCode", t.TimeZoneCode);
313 ar & make_nvp("TimeZoneValid", t.TimeZoneValid);
315 ar & make_nvp("AlarmType", t.AlarmType);
316 ar & make_nvp("Interval", t.Interval);
317 ar & make_nvp("RecurringType", t.RecurringType);
318 ar & make_nvp("RecurringEndTime", t.RecurringEndTime);
319 ar & make_nvp("DayOfWeek", t.DayOfWeek);
320 ar & make_nvp("WeekOfMonth", t.WeekOfMonth);
321 ar & make_nvp("DayOfMonth", t.DayOfMonth);
322 ar & make_nvp("MonthOfYear", t.MonthOfYear);
323 ar & make_nvp("WeekDays", t.WeekDays);
325 ar & make_nvp("PriorityFlag", t.PriorityFlag);
326 ar & make_nvp("StatusFlag", t.StatusFlag);
327 ar & make_nvp("Recurring", t.Recurring);
328 ar & make_nvp("Perpetual", t.Perpetual);
329 ar & make_nvp("DueDateFlag", t.DueDateFlag);
331 if( ver < BARRY_POD_MAP_VERSION ) {
332 ar & make_nvp( "Unknowns", t.Unknowns);
336 template<class ArchiveT>
337 void serialize(ArchiveT &ar, Barry::PINMessage &p, const unsigned int ver)
339 ar & make_nvp("RecType", p.RecType);
340 ar & make_nvp("RecordId", p.RecordId);
342 ar & make_nvp("From", p.From);
343 ar & make_nvp("To", p.To);
344 ar & make_nvp("Cc", p.Cc);
345 ar & make_nvp("Bcc", p.Bcc);
346 ar & make_nvp("Subject", p.Subject);
347 ar & make_nvp("Body", p.Body);
348 ar & make_nvp("MessageRecordId", p.MessageRecordId);
349 ar & make_nvp("MessageReplyTo", p.MessageReplyTo);
350 ar & make_nvp("MessageDateSent", p.MessageDateSent);
351 ar & make_nvp("MessageDateReceived", p.MessageDateReceived);
353 ar & make_nvp("MessageTruncated", p.MessageTruncated);
354 ar & make_nvp("MessageRead", p.MessageRead);
355 ar & make_nvp("MessageReply", p.MessageReply);
356 ar & make_nvp("MessageSaved", p.MessageSaved);
357 ar & make_nvp("MessageSavedDeleted", p.MessageSavedDeleted);
359 ar & make_nvp("MessagePriority", p.Priority);
360 ar & make_nvp("MessageSensitivity", p.Sensitivity);
362 if(ver < BARRY_POD_MAP_VERSION) {
363 ar & make_nvp("Unknowns", p.Unknowns);
367 template <class ArchiveT>
368 void serialize(ArchiveT &ar, Barry::SavedMessage &m, const unsigned int ver)
370 ar & make_nvp("RecType", m.RecType);
371 ar & make_nvp("RecordId", m.RecordId);
373 ar & make_nvp("From", m.From);
374 ar & make_nvp("To", m.To);
375 ar & make_nvp("Cc", m.Cc);
376 ar & make_nvp("Bcc", m.Bcc);
377 ar & make_nvp("Sender", m.Sender);
378 ar & make_nvp("ReplyTo", m.ReplyTo);
379 ar & make_nvp("Subject", m.Subject);
380 ar & make_nvp("Body", m.Body);
381 ar & make_nvp("Attachment", m.Attachment);
382 ar & make_nvp("MessageRecordId", m.MessageRecordId);
383 ar & make_nvp("MessageReplyTo", m.MessageReplyTo);
384 ar & make_nvp("MessageDateSent", m.MessageDateSent);
385 ar & make_nvp("MessageDateReceived", m.MessageDateReceived);
387 ar & make_nvp("MessageTruncated", m.MessageTruncated);
388 ar & make_nvp("MessageRead", m.MessageRead);
389 ar & make_nvp("MessageReply", m.MessageReply);
390 ar & make_nvp("MessageSaved", m.MessageSaved);
391 ar & make_nvp("MessageSavedDeleted", m.MessageSavedDeleted);
393 ar & make_nvp("MessagePriority", m.Priority);
394 ar & make_nvp("MessageSensitivity", m.Sensitivity);
396 if( ver < BARRY_POD_MAP_VERSION ) {
397 ar & make_nvp("Unknowns", m.Unknowns);
401 template <class ArchiveT>
402 void serialize(ArchiveT &ar, Barry::Sms &m, const unsigned int ver)
404 ar & make_nvp("RecType", m.RecType);
405 ar & make_nvp("RecordId", m.RecordId);
407 ar & make_nvp("MessageStatus", m.MessageStatus);
408 ar & make_nvp("DeliveryStatus", m.DeliveryStatus);
410 ar & make_nvp("IsNew", m.IsNew);
411 ar & make_nvp("NewConversation", m.NewConversation);
412 ar & make_nvp("Saved", m.Saved);
413 ar & make_nvp("Deleted", m.Deleted);
414 ar & make_nvp("Opened", m.Opened);
416 ar & make_nvp("Timestamp", m.Timestamp);
417 ar & make_nvp("ServiceCenterTimestamp", m.ServiceCenterTimestamp);
419 ar & make_nvp("DataCodingScheme", m.DataCodingScheme);
420 ar & make_nvp("ErrorId", m.ErrorId);
422 ar & make_nvp("Addresses", m.Addresses);
423 ar & make_nvp("Body", m.Body);
425 if( ver < BARRY_POD_MAP_VERSION ) {
426 ar & make_nvp("Unknowns", m.Unknowns);
430 template <class ArchiveT>
431 void serialize(ArchiveT &ar, Barry::Folder &f, const unsigned int ver)
433 ar & make_nvp("RecType", f.RecType);
434 ar & make_nvp("RecordId", f.RecordId);
436 ar & make_nvp("FolderName", f.Name);
437 ar & make_nvp("FolderNumber", f.Number);
438 ar & make_nvp("FolderLevel", f.Level);
439 ar & make_nvp("FolderType", f.Type);
441 if( ver < BARRY_POD_MAP_VERSION ) {
442 ar & make_nvp( "Unknowns", f.Unknowns);
446 template <class ArchiveT>
447 void serialize(ArchiveT &ar, Barry::Timezone &t, const unsigned int ver)
449 ar & make_nvp("RecType", t.RecType);
450 ar & make_nvp("RecordId", t.RecordId);
452 ar & make_nvp("TZType", t.TZType);
453 ar & make_nvp("DSTOffset", t.DSTOffset);
454 ar & make_nvp("Index", t.Index);
455 ar & make_nvp("Offset", t.Offset);
456 ar & make_nvp("OffsetFraction", t.OffsetFraction);
457 ar & make_nvp("StartMonth", t.StartMonth);
458 ar & make_nvp("EndMonth", t.EndMonth);
459 ar & make_nvp("Left", t.Left);
460 ar & make_nvp("UseDST", t.UseDST);
462 ar & make_nvp("TimeZoneName", t.TimeZoneName);
464 if( ver < BARRY_POD_MAP_VERSION ) {
465 ar & make_nvp("Unknowns", t.Unknowns);
469 }} // namespace boost::serialization
471 #endif