use std::net::IpAddr;
use crate::CaptchaToken;
#[derive(Debug)]
#[non_exhaustive]
pub struct VerificationRequest {
token: CaptchaToken,
remote_ip: Option<IpAddr>,
}
impl VerificationRequest {
#[must_use]
pub const fn new(token: CaptchaToken) -> Self {
Self {
token,
remote_ip: None,
}
}
#[must_use]
pub const fn token(&self) -> &CaptchaToken {
&self.token
}
#[must_use]
pub const fn remote_ip(&self) -> Option<IpAddr> {
self.remote_ip
}
#[must_use]
pub const fn with_remote_ip(mut self, remote_ip: IpAddr) -> Self {
self.remote_ip = Some(remote_ip);
self
}
}
#[cfg(test)]
mod tests {
use super::VerificationRequest;
use crate::CaptchaToken;
#[test]
fn request_preserves_the_supplied_token() {
let raw_token = "request-preservation-test-token";
let token = CaptchaToken::new(raw_token).expect("token should be valid");
let request = VerificationRequest::new(token);
assert_eq!(request.token().expose(), raw_token);
}
}