pub struct SchemaSubject(/* private fields */);Expand description
Value Object: SchemaSubject
Represents the subject/topic that a schema applies to. Subjects typically correspond to event types (e.g., “user.created”, “order.placed”).
Domain Rules:
- Cannot be empty
- Must be between 1 and 256 characters
- Must be lowercase with dots, underscores, or hyphens
- Case-sensitive
- Immutable once created
- Must be unique within a schema registry
This is a Value Object:
- Defined by its value, not identity
- Immutable
- Self-validating
- Compared by value equality
Implementations§
Source§impl SchemaSubject
impl SchemaSubject
Sourcepub fn new(value: String) -> Result<Self>
pub fn new(value: String) -> Result<Self>
Create a new SchemaSubject with validation
§Errors
Returns error if:
- Subject is empty
- Subject is longer than 256 characters
- Subject contains invalid characters
§Examples
use allsource_core::domain::value_objects::SchemaSubject;
let subject = SchemaSubject::new("user.created".to_string()).unwrap();
assert_eq!(subject.as_str(), "user.created");Sourcepub fn into_inner(self) -> String
pub fn into_inner(self) -> String
Get the inner String (consumes self)
Sourcepub fn namespace(&self) -> Option<&str>
pub fn namespace(&self) -> Option<&str>
Get the namespace (everything before the first dot)
§Examples
use allsource_core::domain::value_objects::SchemaSubject;
let subject = SchemaSubject::new("user.created".to_string()).unwrap();
assert_eq!(subject.namespace(), Some("user"));
let subject = SchemaSubject::new("simple".to_string()).unwrap();
assert_eq!(subject.namespace(), None);Sourcepub fn action(&self) -> Option<&str>
pub fn action(&self) -> Option<&str>
Get the action/event name (everything after the last dot)
§Examples
use allsource_core::domain::value_objects::SchemaSubject;
let subject = SchemaSubject::new("user.created".to_string()).unwrap();
assert_eq!(subject.action(), Some("created"));
let subject = SchemaSubject::new("user.profile.updated".to_string()).unwrap();
assert_eq!(subject.action(), Some("updated"));Sourcepub fn is_in_namespace(&self, namespace: &str) -> bool
pub fn is_in_namespace(&self, namespace: &str) -> bool
Check if this subject is in a specific namespace
§Examples
use allsource_core::domain::value_objects::SchemaSubject;
let subject = SchemaSubject::new("user.created".to_string()).unwrap();
assert!(subject.is_in_namespace("user"));
assert!(!subject.is_in_namespace("order"));Sourcepub fn starts_with(&self, prefix: &str) -> bool
pub fn starts_with(&self, prefix: &str) -> bool
Check if this subject starts with a prefix
Sourcepub fn matches_pattern(&self, pattern: &str) -> bool
pub fn matches_pattern(&self, pattern: &str) -> bool
Check if this subject matches an event type pattern
Supports wildcards: * matches any single segment, ** matches any number of segments
§Examples
use allsource_core::domain::value_objects::SchemaSubject;
let subject = SchemaSubject::new("user.created".to_string()).unwrap();
assert!(subject.matches_pattern("user.created"));
assert!(subject.matches_pattern("user.*"));
assert!(subject.matches_pattern("**"));Trait Implementations§
Source§impl AsRef<str> for SchemaSubject
impl AsRef<str> for SchemaSubject
Source§impl Clone for SchemaSubject
impl Clone for SchemaSubject
Source§fn clone(&self) -> SchemaSubject
fn clone(&self) -> SchemaSubject
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SchemaSubject
impl Debug for SchemaSubject
Source§impl<'de> Deserialize<'de> for SchemaSubject
impl<'de> Deserialize<'de> for SchemaSubject
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Display for SchemaSubject
impl Display for SchemaSubject
Source§impl Hash for SchemaSubject
impl Hash for SchemaSubject
Source§impl PartialEq for SchemaSubject
impl PartialEq for SchemaSubject
Source§impl Serialize for SchemaSubject
impl Serialize for SchemaSubject
Source§impl TryFrom<&str> for SchemaSubject
impl TryFrom<&str> for SchemaSubject
Source§impl TryFrom<String> for SchemaSubject
impl TryFrom<String> for SchemaSubject
impl Eq for SchemaSubject
impl StructuralPartialEq for SchemaSubject
Auto Trait Implementations§
impl Freeze for SchemaSubject
impl RefUnwindSafe for SchemaSubject
impl Send for SchemaSubject
impl Sync for SchemaSubject
impl Unpin for SchemaSubject
impl UnwindSafe for SchemaSubject
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.