OLD | NEW |
| (Empty) |
1 # Copyright 2013 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 # mojom's classes provide an interface to mojo modules. Modules are collections | |
6 # of interfaces and structs to be used by mojo ipc clients and servers. | |
7 # | |
8 # A simple interface would be created this way: | |
9 # module = mojom.Module('Foo') | |
10 # interface = module.AddInterface('Bar') | |
11 # method = interface.AddMethod('Tat', 0) | |
12 # method.AddParameter('baz', 0, mojom.INT32) | |
13 # | |
14 | |
15 class Kind(object): | |
16 def __init__(self, spec = None): | |
17 self.spec = spec | |
18 self.parent_kind = None | |
19 | |
20 # Initialize the set of primitive types. These can be accessed by clients. | |
21 BOOL = Kind('b') | |
22 INT8 = Kind('i8') | |
23 INT16 = Kind('i16') | |
24 INT32 = Kind('i32') | |
25 INT64 = Kind('i64') | |
26 UINT8 = Kind('u8') | |
27 UINT16 = Kind('u16') | |
28 UINT32 = Kind('u32') | |
29 UINT64 = Kind('u64') | |
30 FLOAT = Kind('f') | |
31 DOUBLE = Kind('d') | |
32 STRING = Kind('s') | |
33 HANDLE = Kind('h') | |
34 DCPIPE = Kind('h:d:c') | |
35 DPPIPE = Kind('h:d:p') | |
36 MSGPIPE = Kind('h:m') | |
37 SHAREDBUFFER = Kind('h:s') | |
38 | |
39 | |
40 # Collection of all Primitive types | |
41 PRIMITIVES = ( | |
42 BOOL, | |
43 INT8, | |
44 INT16, | |
45 INT32, | |
46 INT64, | |
47 UINT8, | |
48 UINT16, | |
49 UINT32, | |
50 UINT64, | |
51 FLOAT, | |
52 DOUBLE, | |
53 STRING, | |
54 HANDLE, | |
55 DCPIPE, | |
56 DPPIPE, | |
57 MSGPIPE, | |
58 SHAREDBUFFER | |
59 ) | |
60 | |
61 | |
62 class Constant(object): | |
63 def __init__(self, module, enum, field): | |
64 self.namespace = module.namespace | |
65 self.parent_kind = enum.parent_kind | |
66 self.name = [enum.name, field.name] | |
67 self.imported_from = None | |
68 | |
69 def GetSpec(self): | |
70 return (self.namespace + '.' + | |
71 (self.parent_kind and (self.parent_kind.name + '.') or "") + \ | |
72 self.name[1]) | |
73 | |
74 | |
75 class Field(object): | |
76 def __init__(self, name = None, kind = None, ordinal = None, default = None): | |
77 self.name = name | |
78 self.kind = kind | |
79 self.ordinal = ordinal | |
80 self.default = default | |
81 | |
82 | |
83 class Struct(Kind): | |
84 def __init__(self, name = None): | |
85 self.name = name | |
86 self.imported_from = None | |
87 if name != None: | |
88 spec = 'x:' + name | |
89 else: | |
90 spec = None | |
91 Kind.__init__(self, spec) | |
92 self.fields = [] | |
93 | |
94 def AddField(self, name, kind, ordinal = None, default = None): | |
95 field = Field(name, kind, ordinal, default) | |
96 self.fields.append(field) | |
97 return field | |
98 | |
99 | |
100 class Array(Kind): | |
101 def __init__(self, kind = None): | |
102 self.kind = kind | |
103 if kind != None: | |
104 Kind.__init__(self, 'a:' + kind.spec) | |
105 else: | |
106 Kind.__init__(self) | |
107 | |
108 | |
109 class Parameter(object): | |
110 def __init__(self, name = None, kind = None, ordinal = None, default = None): | |
111 self.name = name | |
112 self.ordinal = ordinal | |
113 self.kind = kind | |
114 self.default = default | |
115 | |
116 | |
117 class Method(object): | |
118 def __init__(self, name = None, ordinal = None): | |
119 self.name = name | |
120 self.ordinal = ordinal | |
121 self.parameters = [] | |
122 self.response_parameters = None | |
123 | |
124 def AddParameter(self, name, kind, ordinal = None, default = None): | |
125 parameter = Parameter(name, kind, ordinal, default) | |
126 self.parameters.append(parameter) | |
127 return parameter | |
128 | |
129 def AddResponseParameter(self, name, kind, ordinal = None, default = None): | |
130 if self.response_parameters == None: | |
131 self.response_parameters = [] | |
132 parameter = Parameter(name, kind, ordinal, default) | |
133 self.response_parameters.append(parameter) | |
134 return parameter | |
135 | |
136 | |
137 class Interface(Kind): | |
138 def __init__(self, name = None, peer = None): | |
139 self.name = name | |
140 if name != None: | |
141 spec = 'x:' + name | |
142 else: | |
143 spec = None | |
144 Kind.__init__(self, spec) | |
145 self.peer = peer | |
146 self.methods = [] | |
147 | |
148 def AddMethod(self, name, ordinal = None): | |
149 method = Method(name, ordinal) | |
150 self.methods.append(method) | |
151 return method; | |
152 | |
153 | |
154 class EnumField(object): | |
155 def __init__(self, name = None, value = None): | |
156 self.name = name | |
157 self.value = value | |
158 | |
159 | |
160 class Enum(Kind): | |
161 def __init__(self, name = None): | |
162 self.name = name | |
163 self.imported_from = None | |
164 if name != None: | |
165 spec = 'x:' + name | |
166 else: | |
167 spec = None | |
168 Kind.__init__(self, spec) | |
169 self.fields = [] | |
170 | |
171 | |
172 class Module(object): | |
173 def __init__(self, name = None, namespace = None): | |
174 self.name = name | |
175 self.path = name | |
176 self.namespace = namespace | |
177 self.structs = [] | |
178 self.interfaces = [] | |
179 | |
180 def AddInterface(self, name): | |
181 interface = Interface(name); | |
182 self.interfaces.append(interface) | |
183 return interface; | |
184 | |
185 def AddStruct(self, name): | |
186 struct = Struct(name) | |
187 self.structs.append(struct) | |
188 return struct; | |
OLD | NEW |