SingleLineResponse

Struct SingleLineResponse 

Source
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 CONTENT

For example:

  • 250 OK - Success
  • 552 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: ControlMessage

The underlying control message.

§code: String

The 3-digit status code (e.g., “250”, “552”).

§message_text: String

The message content after the status code.

Implementations§

Source§

impl SingleLineResponse

Source

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());
Source

pub fn is_ok(&self, strict: bool) -> bool

Checks if the response indicates success.

§Arguments
  • strict - If true, requires exactly “250 OK”; if false, only checks for status code “250”
§Returns
  • Non-strict: true if status code is “250”
  • Strict: true if 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

Source§

fn clone(&self) -> SingleLineResponse

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SingleLineResponse

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.