Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: docs/intro/mojom_idl.md

Issue 1760983002: More docs about mojom. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: basically just basically just basically Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: docs/intro/mojom_idl.md
diff --git a/docs/intro/mojom_idl.md b/docs/intro/mojom_idl.md
index e739dbaf7d6beea6439d8cb1cdc6c15952c48c9d..bef2d445fe4d0214535314277fcaf1104c6c8347 100644
--- a/docs/intro/mojom_idl.md
+++ b/docs/intro/mojom_idl.md
@@ -21,7 +21,7 @@ with one endpoint designated the *client* (which sends *request* messages and
receives *response* messages) and the other designed that *server* or *impl*
(which receives request messages and sends response messages).
-For example, take the following Mojom interface definition:
+For example, take the following Mojom interface declaration:
```mojom
interface MyInterface {
Foo(int32 a, string b);
@@ -54,10 +54,26 @@ containing no data. Note that even though the response has no data, a response
message must nonetheless be sent, functioning as an "ack". (Thus this is
different from not having a response, as was the case for `Foo`.)
+## Structs
+
+Mojom defines a way of serializing data structures (with the Mojom IDL providing
+a way of specifying those data structures). A Mojom *struct* is the basic unit
+of serialization. As we saw above, messages are basically just structs, with a
+small amount of additional metadata.
+
+Here is a simple example of a struct declaration:
+```mojom
+struct MyStruct {
+ int32 a;
+ string b;
+};
+```
+We will discuss in greater detail how structs are declared later.
+
### Names in Mojom
-Names in Mojom are not important. Except in affecting compatibility at level of
-source code (when generating bindings), names in a Mojom file may be changed
+Names in Mojom are not important. Except in affecting compatibility at the level
+of source code (when generating bindings), names in a Mojom file may be changed
arbitrarily without any effect on the "meaning" of the Mojom file (subject to
basic language requirements, e.g., avoiding collisions with keywords and other
names). E.g., the following is completely equivalent to the interface discussed
@@ -99,38 +115,138 @@ discuss this matter further here.
**TODO(vtl)**: Maybe mention exceptions to this in attributes (e.g.,
`ServiceName`).
+## Mojom files
-**TODO(vtl)**: Write/(re)organize the sections below.
+A Mojom file consists of, in order:
+* an optional *module* declaration;
+* zero or more *import* statements (the order of these is not important); and
+* zero or more declarations of *struct*s, *interface*s, *union*s, *enum*s, or
+ *const*s (the order of these is not important).
+(These are all described further below.)
-## Structs
+Additionally, C/C++-style comments are supported (i.e., single-line comments
+starting with `//` or multi-line comments of the form `/* ... */`).
+
+As stated above, the order of struct/interface/union/enum/const declarations is
+not important. This is required to allow "cyclic" structures to be defined.
+Nonetheless, whenever possible, one should declare things before they are
+"used". For example, the following is valid but not recommended:
+```mojom
+// NOT recommended.
+
+const MyEnum kMyConst = kMyOtherConst;
+const MyEnum kMyOtherConst = A_VALUE;
+
+enum MyEnum {
+ A_VALUE,
+ ANOTHER_VALUE,
+};
+```
+
+### Naming style
+
+There is a standard style for naming things:
+* `StudlyCaps` (a.k.a. `CapitalizedCamelCase`) for: (struct, interface, union,
+ and enum) type names and message (a.k.a. function or method) names;
+* `unix_hacker_style` for field names (in structs and unions) and "parameter"
+ names;
+* `ALL_CAPS_UNIX_HACKER_STYLE` for enum value names; and
+* `kStudlyCaps` for const names.
+
+Following this style is highly recommended, since code generators for various
+languages will expect this style, in order to transform the names into a more
+language-appropriate style.
+
+### Module statement
+
+**TODO(vtl)**
-## Modules
+### Import declarations
+
+**TODO(vtl)**
+
+### Struct declarations
+
+A Mojom struct declaration consists of a finite sequence of *field declaration*,
+each of which consists of a *type*, a *name*, and optionally a *default value*
+(if applicable for the given type). (If no default value is declared, then the
+default is the default value for the field type, typically 0, null, or similar.)
+
+Additionally, a struct may contain enum and const declarations (**TODO(vtl)**:
+why not struct/union/interface declarations?). While the order of the field
+declarations (with respect to one another) is important, the ordering of the
+enum/const declarations (with respect to both the field declarations and other
+enum/const declarations) is not. (But as before, we recommend declaring things
+before "use".)
+
+Here is an example with these elements:
+```mojom
+struct Foo {
+ const int8 kSomeConstant = 123;
+
+ enum MyEnum {
+ A_VALUE,
+ ANOTHER_VALUE
+ };
+
+ int8 first_field = kSomeConstant;
+ uint32 second_field = 123;
+ MyEnum etc_etc = A_VALUE;
+ float a; // Default value is 0.
+ string? b; // Default value is null.
+};
+```
+(Note that `kSomeConstant` may be referred to as `Foo.kSomeConstant` and,
+similarly, `MyEnum` as `Foo.MyEnum`. This is required outside of the `Foo`
+declaration.)
+
+### Interface declarations
+
+**TODO(vtl)**
+
+### Union declarations
+
+**TODO(vtl)**
+
+### Enum declarations
+
+**TODO(vtl)**
+
+### Const declarations
+
+**TODO(vtl)**
+
+**TODO(vtl)**: Write/(re)organize the sections below.
## Data types
### Primitive types
-### Enums
+#### Standard types
+
+#### Enum types
+
+### "Pointer" types
-### Strings
+#### Nullability
-### Nullability
+#### Strings
-### Structs
+#### Maps
-### Arrays
+#### Structs
-### Maps
+#### Arrays
-### Unions
+#### Unions
-### Handle values
+### Handle types
-### Interface values
+#### Raw handle types
-### Interface requests
+#### Interface types
-## Consts
+#### Interface request types
## Annotations
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698