Add documentation for using dicts as typeless structs
This commit is contained in:
@@ -275,8 +275,17 @@ There is a convenience method for converting Cap'n Proto messages to a dictionar
|
|||||||
For the reverse, all you have to do is pass keyword arguments to the new_message constructor::
|
For the reverse, all you have to do is pass keyword arguments to the new_message constructor::
|
||||||
|
|
||||||
my_dict = {'name' : 'alice'}
|
my_dict = {'name' : 'alice'}
|
||||||
alice = addressbook.Person.new_message(**my_dict)
|
alice = addressbook_capnp.Person.new_message(**my_dict)
|
||||||
# equivalent to: alice = addressbook.Person.new_message(name='alice')
|
# equivalent to: alice = addressbook_capnp.Person.new_message(name='alice')
|
||||||
|
|
||||||
|
It's also worth noting, you can use python lists/dictionaries interchangably with their Cap'n Proto equivalent types::
|
||||||
|
|
||||||
|
book = addressbook_capnp.AddressBook.new_message(people=[{'name': 'Alice'}])
|
||||||
|
...
|
||||||
|
book = addressbook_capnp.AddressBook.new_message()
|
||||||
|
book.init('people', 1)
|
||||||
|
book.people[0] = {'name': 'Bob'}
|
||||||
|
|
||||||
|
|
||||||
Byte Strings/Buffers
|
Byte Strings/Buffers
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -287,11 +296,11 @@ There is serialization to a byte string available::
|
|||||||
|
|
||||||
And a corresponding from_bytes function::
|
And a corresponding from_bytes function::
|
||||||
|
|
||||||
alice = addressbook.Person.from_bytes(encoded_message)
|
alice = addressbook_capnp.Person.from_bytes(encoded_message)
|
||||||
|
|
||||||
There are also packed versions::
|
There are also packed versions::
|
||||||
|
|
||||||
alice2 = addressbook.Person.from_bytes_packed(alice.to_bytes_packed())
|
alice2 = addressbook_capnp.Person.from_bytes_packed(alice.to_bytes_packed())
|
||||||
|
|
||||||
RPC
|
RPC
|
||||||
----------
|
----------
|
||||||
@@ -313,6 +322,8 @@ Starting a client is very easy::
|
|||||||
|
|
||||||
client = capnp.TwoPartyClient('localhost:60000')
|
client = capnp.TwoPartyClient('localhost:60000')
|
||||||
|
|
||||||
|
.. note:: You can also pass a raw socket with a `fileno()` method to TwoPartyClient
|
||||||
|
|
||||||
Restoring
|
Restoring
|
||||||
###################
|
###################
|
||||||
|
|
||||||
@@ -339,13 +350,9 @@ This creates a request for the method named 'evaluate', sets `expression.literal
|
|||||||
|
|
||||||
The shorter syntax for calling methods is::
|
The shorter syntax for calling methods is::
|
||||||
|
|
||||||
promise = calculator.getOperator(op='add')
|
eval_promise = calculator.evaluate({"literal": 123})
|
||||||
# equivalent to:
|
|
||||||
request = calculator.getOperator_request()
|
|
||||||
request.op = 'add'
|
|
||||||
promise = request.send()
|
|
||||||
|
|
||||||
The major shortcoming with this method is that it doesn't work for complex fields, such as `expression.literal` from the first example.
|
The major shortcoming with this method is that expressing complex fields with many nested sub-structs can become very tedious.
|
||||||
|
|
||||||
Once you have a promise, there are 2 ways of getting to the result. The first is to wait for it::
|
Once you have a promise, there are 2 ways of getting to the result. The first is to wait for it::
|
||||||
|
|
||||||
@@ -378,15 +385,13 @@ Server
|
|||||||
Starting a Server
|
Starting a Server
|
||||||
##################
|
##################
|
||||||
|
|
||||||
Once you have a socket, it's quite simple to start a server::
|
|
||||||
|
|
||||||
server = capnp.TwoPartyServer('*:60000', restore)
|
server = capnp.TwoPartyServer('*:60000', restore)
|
||||||
|
|
||||||
server.run_forever()
|
server.run_forever()
|
||||||
|
|
||||||
See the `Restore`_ section for an explanation of what the `restore` object needs to looks like.
|
See the `Restore`_ section for an explanation of what the `restore` object needs to looks like.
|
||||||
|
|
||||||
.. note:: You can also pass a socket with a `fileno()` method to TwoPartyServer. In that case, `run_forever` will not work, and you will have to use `on_disconnect.wait()`.
|
.. note:: You can also pass a raw socket with a `fileno()` method to TwoPartyServer. In that case, `run_forever` will not work, and you will have to use `on_disconnect.wait()`.
|
||||||
|
|
||||||
Implementing a Server
|
Implementing a Server
|
||||||
#######################
|
#######################
|
||||||
|
|||||||
Reference in New Issue
Block a user