Crates.io | fuel-streams-macros |
lib.rs | fuel-streams-macros |
version | 0.0.13 |
source | src |
created_at | 2024-08-24 06:07:36.587107 |
updated_at | 2024-11-28 02:53:14.452812 |
description | Macros for implementing traits and deriving functionality in the fuel-streams crate |
homepage | https://fuel.network/ |
repository | https://github.com/fuellabs/data-systems |
max_upload_size | |
id | 1349839 |
size | 7,341 |
Macros for implementing traits and deriving functionality in the fuel-streams ecosystem
Provides macros for implementing traits and deriving functionality in the fuel-streams ecosystem.
[!NOTE] This crate is specifically modeled for the Fuel Data Systems project, and is not intended for general use outside of the project.
The Subject
derive macro allows you to easily implement the Subject
trait for your structs. It generates methods for parsing, building, and creating wildcards for your subject.
Example:
use fuel_streams_macros::subject::{Subject, IntoSubject, SubjectBuildable};
#[derive(Subject, Debug, Clone, Default)]
#[subject_wildcard = "test.>"]
#[subject_format = "test.{field1}.{field2}"]
struct TestSubject {
field1: Option<String>,
field2: Option<u32>,
}
// Create a new TestSubject
let subject = TestSubject {
field1: Some("foo".to_string()),
field2: Some(55),
};
// Parse the subject
assert_eq!(subject.parse(), "test.foo.55");
// Create a wildcard
assert_eq!(TestSubject::wildcard(None, Some(10)), "test.*.10");
// Create using the build method
let subject = TestSubject::build(Some("foo".into()), Some(55));
assert_eq!(subject.parse(), "test.foo.55");
// Create a new TestSubject with the builder pattern
let subject = TestSubject::new()
.with_field1(Some("foo".to_string()))
.with_field2(Some(55));
assert_eq!(subject.parse(), "test.foo.55");
// Convert to a string
assert_eq!(&subject.to_string(), "test.foo.55");
Contributions are welcome! Please feel free to submit a Pull Request.
For more information on contributing, please see the CONTRIBUTING.md file in the root of the repository.
This repo is licensed under the Apache-2.0
license. See LICENSE
for more information.