| Crates.io | pedronauck-streams-subject |
| lib.rs | pedronauck-streams-subject |
| version | 0.0.27 |
| created_at | 2025-03-13 17:19:48.840639+00 |
| updated_at | 2025-03-13 17:19:48.840639+00 |
| description | Macros for implementing subject functionality in the pedronauck-streams crate |
| homepage | https://fuel.network/ |
| repository | https://github.com/fuellabs/data-systems |
| max_upload_size | |
| id | 1591203 |
| size | 29,096 |
Macros for implementing subject functionality in the pedronauck-streams ecosystem
Provides macros for implementing subject functionality in the pedronauck-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 subjectsfor your subject.
Example:
use pedronauck_streams_subject::subject::*;
#[derive(Subject, Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
#[subject(id = "test")]
#[subject(entity = "Test")]
#[subject(query_all = "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 subject string
assert_eq!(TestSubject::build_string(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.