blob: 6dfdfd0c13d4553b652721978c42fded444170c9 [file] [log] [blame]
Rust Generated Code Guide
=========================
Usage
-----
Example invocation:
.. sourcecode:: bash
cargo run my-protocol.pdl --output-format rust > my-protocol.rs
Language bindings
-----------------
This section contains the generated rust bindings for language constructs that
are stabilized.
Preamble
^^^^^^^^
Private prevents users from creating arbitrary scalar values in situations where
the value needs to be validated. Users can freely deref the value, but only the
backend may create it.
.. sourcecode:: rust
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct Private<T>(T);
impl<T> std::ops::Deref for Private<T> { .. }
.. warning::
PDL authorizes the use of rust keywords as identifier. Keyword identifiers
are generated as raw identifiers, e.g. `type` is generated as `r#type`.
Enum declarations
^^^^^^^^^^^^^^^^^
+---------------------------------------+---------------------------------------------------------------+
| :: | .. sourcecode:: rust |
| | |
| enum TestEnum : 8 { | #[repr(u64)] |
| A = 1, | #[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)] |
| B = 2, | enum TestEnum { |
| } | A = 1, |
| | B = 2, |
| | } |
| | |
| | impl TryFrom<u8> for TestEnum { .. } |
| | impl From<TestEnum> for u8 { .. } |
| | impl From<TestEnum> for u16 { .. } |
| | impl From<TestEnum> for u32 { .. } |
| | impl From<TestEnum> for u64 { .. } |
| | impl From<TestEnum> for i8 { .. } |
| | impl From<TestEnum> for i16 { .. } |
| | impl From<TestEnum> for i32 { .. } |
| | impl From<TestEnum> for i64 { .. } |
+---------------------------------------+---------------------------------------------------------------+
| :: | .. sourcecode:: rust |
| | |
| enum TestEnum : 8 { | #[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)] |
| A = 1, | enum TestEnum { |
| B = 2..10 { | A, |
| C = 3, | C, |
| }, | B(Private<u8>), |
| } | } |
| | |
| | impl TryFrom<u8> for TestEnum { .. } |
| | impl From<TestEnum> for u8 { .. } |
| | impl From<TestEnum> for u16 { .. } |
| | impl From<TestEnum> for u32 { .. } |
| | impl From<TestEnum> for u64 { .. } |
| | impl From<TestEnum> for i8 { .. } |
| | impl From<TestEnum> for i16 { .. } |
| | impl From<TestEnum> for i32 { .. } |
| | impl From<TestEnum> for i64 { .. } |
+---------------------------------------+---------------------------------------------------------------+
| :: | .. sourcecode:: rust |
| | |
| enum TestEnum : 8 { | #[repr(u64)] |
| A = 1, | #[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)] |
| B = 2, | enum TestEnum { |
| OTHER = .., | A, |
| } | B, |
| | Other(Private<u8>), |
| | } |
| | |
| | impl From<u8> for TestEnum { .. } |
| | impl From<TestEnum> for u8 { .. } |
| | impl From<TestEnum> for u16 { .. } |
| | impl From<TestEnum> for u32 { .. } |
| | impl From<TestEnum> for u64 { .. } |
| | impl From<TestEnum> for i8 { .. } |
| | impl From<TestEnum> for i16 { .. } |
| | impl From<TestEnum> for i32 { .. } |
| | impl From<TestEnum> for i64 { .. } |
+---------------------------------------+---------------------------------------------------------------+