| Crates.io | codas-macros |
| lib.rs | codas-macros |
| version | 0.5.1 |
| created_at | 2024-10-30 21:56:27.37896+00 |
| updated_at | 2025-05-15 04:18:00.396301+00 |
| description | Macros for Codas. |
| homepage | https://www.codas.dev |
| repository | https://github.com/with-caer/codas |
| max_upload_size | |
| id | 1429282 |
| size | 25,011 |
Macros for generating Rust types from Codas.
export_coda!This macro parses a coda from a file path relative to the crate's workspace root path, and generating Rust data structures for the coda in-place.
Note: A crate's workspace root is always the top-most directory containing a
Cargo.toml.
Here's an example that exports Rust data structures
for the greeter_coda.md:
# use codas::codec::*;
# use codas_macros::export_coda;
// The file path should be relative to
// the _root_ of a crate's workspace.
export_coda!("codas-macros/tests/greeter_coda.md");
# fn main() {
// A struct is generated for each data type in the coda.
let request = Request { message: "Hi!".into() };
// An enum is generated with variants for each data type
// in the coda. The enum's name will be the same as the
// coda's name, with `Data` appended.
let data = GreeterData::from(request.clone());
assert_eq!("Hi!", match data.clone() {
GreeterData::Request(Request { message }) => message,
GreeterData::Response(..) |
_ => unimplemented!(),
});
// The structs and enums have auto-generated coda codecs.
let mut request_bytes = vec![];
request_bytes.write_data(&request).unwrap();
let mut data_bytes = vec![];
data_bytes.write_data(&data).unwrap();
assert_eq!(request_bytes, data_bytes);
// The enum can safely decode bytes containing
// coda-encoded data.
let data = data_bytes.as_slice().read_data().unwrap();
assert_eq!("Hi!", match data {
GreeterData::Request(Request { message }) => message,
GreeterData::Response(..) |
_ => unimplemented!(),
});
# }
Copyright © 2024—2025 With Caer, LLC and Alicorn Systems, LLC.
Licensed under the MIT license. Refer to the license file for more info.