CQC
A sans-io Rust implementation of the CQC interface.
CQC in action
The following example will create a qubit on one node and send it to another
node. Before running the example below start up the SimulaQron nodes with
$NETSIM/run/startAll.sh --nrnodes 2
.
extern crate bincode;
extern crate cqc;
use builder;
use hdr;
use net;
Design goals
The following goals drive the design of the cqc
crate:
-
The user should be able to create any valid packet
This goal is achieved by having correct struct definitions for the different CQC headers.
-
It should be difficult, though preferably impossible, to create invalid packets
The second goal is achieved by using Rust's typing system as much as possible, especially enums for fields with only a small set of possible values. Furthermore a
builder
module is provided which guarantees correct CQC packets. -
Decoding should raise errors if unrecognised values are detected
This is achieved through a combination of type definitions and deserialization implementations.
-
No assumption about the user's run-time should be made
The library is sans-io and only provides a very plain encoder and decoder as an example. The intention is that the user builds packets using the
cqc
library, but I/O is their responsibility. TheSerialize
andDeserialize
traits are implemented so that the user can simply usebincode
for encode/decode.
Limitations
- Factory and Sequence Headers are not currently fully supported.
- Encode/decode is implemented for client-side operations.
Usage
Add this to your Cargo.toml
:
[]
= "0.3"
and this to your source file:
extern crate cqc;