pub struct SingleLineResponse {
pub message: ControlMessage,
pub code: String,
pub message_text: String,
}Expand description
A simple single-line response from Tor.
SingleLineResponse represents responses that contain exactly one line,
typically used for commands that perform actions rather than query data.
These responses are usually “250 OK” on success or an error code with
a description on failure.
§Response Format
Single-line responses have the format:
STATUS CONTENTFor example:
250 OK- Success552 Unrecognized key "foo"- Error
§Example
use stem_rs::response::{ControlMessage, SingleLineResponse};
let msg = ControlMessage::from_str("250 OK\r\n", None, false).unwrap();
let response = SingleLineResponse::from_message(msg).unwrap();
assert!(response.is_ok(false));
assert!(response.is_ok(true)); // Strict check for "250 OK"
assert_eq!(response.code, "250");
assert_eq!(response.message_text, "OK");Fields§
§message: ControlMessageThe underlying control message.
code: StringThe 3-digit status code (e.g., “250”, “552”).
message_text: StringThe message content after the status code.
Implementations§
Source§impl SingleLineResponse
impl SingleLineResponse
Sourcepub fn from_message(message: ControlMessage) -> Result<Self, Error>
pub fn from_message(message: ControlMessage) -> Result<Self, Error>
Creates a SingleLineResponse from a control message.
Validates that the message contains exactly one line and extracts the status code and message text.
§Errors
Returns Error::Protocol if:
- The message contains more than one line
- The message is empty
§Example
use stem_rs::response::{ControlMessage, SingleLineResponse};
// Valid single-line response
let msg = ControlMessage::from_str("250 OK\r\n", None, false).unwrap();
let response = SingleLineResponse::from_message(msg).unwrap();
// Multi-line response fails
let msg = ControlMessage::from_str("250-line1\r\n250 line2\r\n", None, false).unwrap();
assert!(SingleLineResponse::from_message(msg).is_err());Sourcepub fn is_ok(&self, strict: bool) -> bool
pub fn is_ok(&self, strict: bool) -> bool
Checks if the response indicates success.
§Arguments
strict- Iftrue, requires exactly “250 OK”; iffalse, only checks for status code “250”
§Returns
- Non-strict:
trueif status code is “250” - Strict:
trueif response is exactly “250 OK”
§Example
use stem_rs::response::{ControlMessage, SingleLineResponse};
let msg = ControlMessage::from_str("250 OK\r\n", None, false).unwrap();
let response = SingleLineResponse::from_message(msg).unwrap();
assert!(response.is_ok(false)); // Non-strict
assert!(response.is_ok(true)); // Strict
let msg = ControlMessage::from_str("250 Done\r\n", None, false).unwrap();
let response = SingleLineResponse::from_message(msg).unwrap();
assert!(response.is_ok(false)); // Non-strict passes
assert!(!response.is_ok(true)); // Strict fails (not "OK")Trait Implementations§
Source§impl Clone for SingleLineResponse
impl Clone for SingleLineResponse
Source§fn clone(&self) -> SingleLineResponse
fn clone(&self) -> SingleLineResponse
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 moreAuto Trait Implementations§
impl Freeze for SingleLineResponse
impl RefUnwindSafe for SingleLineResponse
impl Send for SingleLineResponse
impl Sync for SingleLineResponse
impl Unpin for SingleLineResponse
impl UnwindSafe for SingleLineResponse
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