Expand description
Fuel Streams Macros
Macros for implementing traits and deriving functionality in the fuel-streams ecosystem
ยง๐ About The Project
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.
ยง๐ Usage
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");
ยง๐ค Contributing
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.
ยง๐ License
This repo is licensed under the Apache-2.0
license. See LICENSE
for more information.