Subject Path
A Subject Path (NatsSubjectPath
) is a fundamental type in Shizuku that represents NATS subject routing paths. It’s a structured way to represent dot-separated NATS subjects (e.g., “foo.bar.baz”).
Usage
Subject paths are used to:
- Define message routing in NATS services
- Specify subscription patterns
- Create message matchers for filtering
Creating Subject Paths
You can create subject paths in several ways:
use shizuku::core::message::NatsSubjectPath;
// From string sliceslet path = NatsSubjectPath::from(vec!["foo", "bar", "baz"]);
// From owned stringslet path = NatsSubjectPath::from(vec![ String::from("foo"), String::from("bar"), String::from("baz")]);
// From compact stringslet path = NatsSubjectPath::from(vec![ compact_str::CompactString::new("foo"), compact_str::CompactString::new("bar"), compact_str::CompactString::new("baz")]);
Subject Matching
Subject paths work closely with SubjectMatcher
for pattern matching. The subject_matcher!
macro provides an easy way to create matchers:
use shizuku::subject_matcher;
let path = NatsSubjectPath::from(vec!["foo", "bar", "baz"]);
// Exact matchlet matcher = subject_matcher!["foo", "bar", "baz"];assert!(matcher.matches(&path));
// Wildcard matchlet matcher = subject_matcher!["foo", "*", "baz"];assert!(matcher.matches(&path));
// Multi-level wildcardlet matcher = subject_matcher!["foo", ">"];assert!(matcher.matches(&path));
Pattern Rules
*
matches exactly one segment>
matches one or more segments (must be the last segment)- Static segments must match exactly
Best Practices
- Use descriptive segment names that reflect your message hierarchy
- Keep subjects reasonably short (3-4 segments is typical)
- Consider using version numbers in subjects for API versioning
- Use consistent naming conventions across your application
- Don’t use multi-level wildcards (
>
) unless necessary, as they can make code harder to reason about