summaryrefslogtreecommitdiffstats
path: root/common/domain/typeimplementations.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/domain/typeimplementations.h')
-rw-r--r--common/domain/typeimplementations.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h
new file mode 100644
index 0000000..cb63949
--- /dev/null
+++ b/common/domain/typeimplementations.h
@@ -0,0 +1,122 @@
1/*
2 * Copyright (C) 2015 Christian Mollekopf <chrigi_1@fastmail.fm>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19#pragma once
20
21#include "applicationdomaintype.h"
22
23class QByteArray;
24
25template<typename T>
26class ReadPropertyMapper;
27template<typename T>
28class WritePropertyMapper;
29class IndexPropertyMapper;
30
31class TypeIndex;
32
33/**
34 * Implements all type-specific code such as updating and querying indexes.
35 *
36 * These are type specifiy default implementations. Theoretically a resource could implement it's own implementation.
37 */
38namespace Sink {
39namespace ApplicationDomain {
40
41namespace Buffer {
42 struct Mail;
43 struct MailBuilder;
44}
45
46template<>
47class TypeImplementation<Sink::ApplicationDomain::Mail> {
48public:
49 typedef Sink::ApplicationDomain::Buffer::Mail Buffer;
50 typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder;
51 static void configure(TypeIndex &index);
52 static void configure(ReadPropertyMapper<Buffer> &propertyMapper);
53 static void configure(WritePropertyMapper<BufferBuilder> &propertyMapper);
54 static void configure(IndexPropertyMapper &indexPropertyMapper);
55};
56
57namespace Buffer {
58 struct Folder;
59 struct FolderBuilder;
60}
61
62template<>
63class TypeImplementation<Sink::ApplicationDomain::Folder> {
64public:
65 typedef Sink::ApplicationDomain::Buffer::Folder Buffer;
66 typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder;
67 static void configure(TypeIndex &);
68 static void configure(ReadPropertyMapper<Buffer> &);
69 static void configure(WritePropertyMapper<BufferBuilder> &);
70 static void configure(IndexPropertyMapper &indexPropertyMapper);
71};
72
73namespace Buffer {
74 struct Contact;
75 struct ContactBuilder;
76}
77
78template<>
79class TypeImplementation<Sink::ApplicationDomain::Contact> {
80public:
81 typedef Sink::ApplicationDomain::Buffer::Contact Buffer;
82 typedef Sink::ApplicationDomain::Buffer::ContactBuilder BufferBuilder;
83 static void configure(TypeIndex &);
84 static void configure(ReadPropertyMapper<Buffer> &);
85 static void configure(WritePropertyMapper<BufferBuilder> &);
86 static void configure(IndexPropertyMapper &indexPropertyMapper);
87};
88
89namespace Buffer {
90 struct Addressbook;
91 struct AddressbookBuilder;
92}
93
94template<>
95class TypeImplementation<Sink::ApplicationDomain::Addressbook> {
96public:
97 typedef Sink::ApplicationDomain::Buffer::Addressbook Buffer;
98 typedef Sink::ApplicationDomain::Buffer::AddressbookBuilder BufferBuilder;
99 static void configure(TypeIndex &);
100 static void configure(ReadPropertyMapper<Buffer> &);
101 static void configure(WritePropertyMapper<BufferBuilder> &);
102 static void configure(IndexPropertyMapper &indexPropertyMapper);
103};
104
105namespace Buffer {
106 struct Event;
107 struct EventBuilder;
108}
109
110template<>
111class TypeImplementation<Sink::ApplicationDomain::Event> {
112public:
113 typedef Sink::ApplicationDomain::Buffer::Event Buffer;
114 typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder;
115 static void configure(TypeIndex &);
116 static void configure(ReadPropertyMapper<Buffer> &);
117 static void configure(WritePropertyMapper<BufferBuilder> &);
118 static void configure(IndexPropertyMapper &indexPropertyMapper);
119};
120
121}
122}