pub trait StringArgument {
// Required methods
fn require_non_blank(&self, name: &str) -> ArgumentResult<&Self>;
fn require_length_be(
&self,
name: &str,
length: usize,
) -> ArgumentResult<&Self>;
fn require_length_at_least(
&self,
name: &str,
min_length: usize,
) -> ArgumentResult<&Self>;
fn require_length_at_most(
&self,
name: &str,
max_length: usize,
) -> ArgumentResult<&Self>;
fn require_length_in_range(
&self,
name: &str,
min_length: usize,
max_length: usize,
) -> ArgumentResult<&Self>;
fn require_match(
&self,
name: &str,
pattern: &Regex,
) -> ArgumentResult<&Self>;
fn require_not_match(
&self,
name: &str,
pattern: &Regex,
) -> ArgumentResult<&Self>;
}Expand description
String argument validation trait
Provides length, content, and format validation functionality for string types.
§Features
- Length validation support
- Blank checking support
- Regular expression matching support
- Method chaining support
§Use Cases
- User input validation
- Configuration parameter checking
- Text content validation
§Author
Haixing Hu
§Examples
Basic usage (returns ArgumentResult):
use prism3_core::lang::argument::{StringArgument, ArgumentResult};
fn set_username(username: &str) -> ArgumentResult<()> {
let username = username
.require_non_blank("username")?
.require_length_in_range("username", 3, 20)?;
println!("Username: {}", username);
Ok(())
}Converting to other error types:
use prism3_core::lang::argument::StringArgument;
fn set_username(username: &str) -> Result<(), String> {
let username = username
.require_non_blank("username")
.and_then(|u| u.require_length_in_range("username", 3, 20))
.map_err(|e| e.to_string())?;
println!("Username: {}", username);
Ok(())
}Required Methods§
Sourcefn require_non_blank(&self, name: &str) -> ArgumentResult<&Self>
fn require_non_blank(&self, name: &str) -> ArgumentResult<&Self>
Validate that string is not blank
Checks if the string is empty or contains only whitespace characters.
§Parameters
name- Parameter name
§Returns
Returns Ok(self) if string is not blank, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
let text = "hello";
assert!(text.require_non_blank("text").is_ok());
let blank = " ";
assert!(blank.require_non_blank("text").is_err());Sourcefn require_length_be(&self, name: &str, length: usize) -> ArgumentResult<&Self>
fn require_length_be(&self, name: &str, length: usize) -> ArgumentResult<&Self>
Validate that string length equals the specified value
§Parameters
name- Parameter namelength- Expected length
§Returns
Returns Ok(self) if length matches, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
let code = "ABC12";
assert!(code.require_length_be("code", 5).is_ok());
let wrong_length = "ABC";
assert!(wrong_length.require_length_be("code", 5).is_err());Sourcefn require_length_at_least(
&self,
name: &str,
min_length: usize,
) -> ArgumentResult<&Self>
fn require_length_at_least( &self, name: &str, min_length: usize, ) -> ArgumentResult<&Self>
Validate that string length is at least the specified value
§Parameters
name- Parameter namemin_length- Minimum length
§Returns
Returns Ok(self) if length is not less than minimum, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
let password = "secret123";
assert!(password.require_length_at_least("password", 8).is_ok());Sourcefn require_length_at_most(
&self,
name: &str,
max_length: usize,
) -> ArgumentResult<&Self>
fn require_length_at_most( &self, name: &str, max_length: usize, ) -> ArgumentResult<&Self>
Validate that string length is at most the specified value
§Parameters
name- Parameter namemax_length- Maximum length
§Returns
Returns Ok(self) if length is not greater than maximum, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
let description = "Short text";
assert!(description.require_length_at_most("description", 100).is_ok());Sourcefn require_length_in_range(
&self,
name: &str,
min_length: usize,
max_length: usize,
) -> ArgumentResult<&Self>
fn require_length_in_range( &self, name: &str, min_length: usize, max_length: usize, ) -> ArgumentResult<&Self>
Validate that string length is within the specified range
§Parameters
name- Parameter namemin_length- Minimum length (inclusive)max_length- Maximum length (inclusive)
§Returns
Returns Ok(self) if length is within range, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
let username = "alice";
assert!(username.require_length_in_range("username", 3, 20).is_ok());Sourcefn require_match(&self, name: &str, pattern: &Regex) -> ArgumentResult<&Self>
fn require_match(&self, name: &str, pattern: &Regex) -> ArgumentResult<&Self>
Validate that string matches regular expression
§Parameters
name- Parameter namepattern- Regular expression
§Returns
Returns Ok(self) if matches, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
use regex::Regex;
let email = "user@example.com";
let pattern = Regex::new(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$").unwrap();
assert!(email.require_match("email", &pattern).is_ok());Sourcefn require_not_match(
&self,
name: &str,
pattern: &Regex,
) -> ArgumentResult<&Self>
fn require_not_match( &self, name: &str, pattern: &Regex, ) -> ArgumentResult<&Self>
Validate that string does not match regular expression
§Parameters
name- Parameter namepattern- Regular expression
§Returns
Returns Ok(self) if does not match, otherwise returns an error
§Examples
use prism3_core::lang::argument::StringArgument;
use regex::Regex;
let text = "hello world";
let pattern = Regex::new(r"\d+").unwrap();
assert!(text.require_not_match("text", &pattern).is_ok());Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.