# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# mojom's classes provide an interface to mojo modules. Modules are collections
# of interfaces and structs to be used by mojo ipc clients and servers.
#
# A simple interface would be created this way:
# module = mojom.Module('Foo')
# interface = module.AddInterface('Bar')
# method = interface.AddMethod('Tat', 0)
# method.AddParameter('baz', 0, mojom.INT32)
#
class Kind(object):
def __init__(self, spec = None):
self.spec = spec
# Initialize the set of primitive types. These can be accessed by clients.
BOOL = Kind('b')
INT8 = Kind('i8')
INT16 = Kind('i16')
INT32 = Kind('i32')
INT64 = Kind('i64')
UINT8 = Kind('u8')
UINT16 = Kind('u16')
UINT32 = Kind('u32')
UINT64 = Kind('u64')
FLOAT = Kind('f')
DOUBLE = Kind('d')
STRING = Kind('s')
HANDLE = Kind('h')
MSGPIPE = Kind('h:m')
# Collection of all Primitive types
PRIMITIVES = (
BOOL,
INT8,
INT16,
INT32,
INT64,
UINT8,
UINT16,
UINT32,
UINT64,
FLOAT,
DOUBLE,
STRING,
HANDLE,
MSGPIPE
)
class Field(object):
def __init__(self, name = None, kind = None, ordinal = None, default = None):
self.name = name
self.kind = kind
self.ordinal = ordinal
self.default = default
class Struct(Kind):
def __init__(self, name = None):
self.name = name
if name != None:
spec = 'x:' + name
else:
spec = None
Kind.__init__(self, spec)
self.fields = []
def AddField(self, name, kind, ordinal = None, default = None):
field = Field(name, kind, ordinal, default)
self.fields.append(field)
return field
class Array(Kind):
def __init__(self, kind = None):
self.kind = kind
if kind != None:
Kind.__init__(self, 'a:' + kind.spec)
else:
Kind.__init__(self)
class Parameter(object):
def __init__(self, name = None, kind = None, ordinal = None, default = None):
self.name = name
self.ordinal = ordinal
self.kind = kind
self.default = default
class Method(object):
def __init__(self, name = None, ordinal = None):
self.name = name
self.ordinal = ordinal
self.parameters = []
def AddParameter(self, name, kind, ordinal = None, default = None):
parameter = Parameter(name, kind, ordinal, default)
self.parameters.append(parameter)
return parameter
class Interface(object):
def __init__(self, name = None, peer = None):
self.name = name
self.peer = peer
self.methods = []
def AddMethod(self, name, ordinal = None):
method = Method(name, ordinal)
self.methods.append(method)
return method;
class EnumField(object):
def __init__(self, name = None, value = None):
self.name = name
self.value = value
class Enum(object):
def __init__(self, name = None):
self.name = name
self.fields = []
class Module(object):
def __init__(self, name = None, namespace = None):
self.name = name
self.namespace = namespace
self.structs = []
self.interfaces = []
def AddInterface(self, name):
interface = Interface(name);
self.interfaces.append(interface)
return interface;
def AddStruct(self, name):
struct = Struct(name)
self.structs.append(struct)
return struct;