103 lines
No EOL
2.9 KiB
Rust
103 lines
No EOL
2.9 KiB
Rust
pub mod channel;
|
|
pub mod client;
|
|
|
|
use std::fmt::{Debug, Display, Formatter};
|
|
use crate::parameter::*;
|
|
|
|
pub enum Response {
|
|
Ok,
|
|
Data(ParameterList),
|
|
DataList(Vec<ParameterList>),
|
|
}
|
|
|
|
pub struct ResponseError {
|
|
pub id: i32,
|
|
pub msg: String,
|
|
}
|
|
|
|
impl TryFrom<String> for Response {
|
|
type Error = ResponseError;
|
|
|
|
fn try_from(response_str: String) -> Result<Self, ResponseError> {
|
|
let mut response_str = response_str.trim_end_matches("\n\r");
|
|
|
|
if response_str.starts_with("error ") {
|
|
response_str = response_str.trim_start_matches("error ");
|
|
let response_params = parameter_parse(response_str);
|
|
Err(ResponseError::create_error(&response_params))
|
|
}
|
|
else {
|
|
let mut parameter_lists: Vec<ParameterList> = Vec::new();
|
|
for response_entry in response_str.split('|') {
|
|
let response_params = parameter_parse(response_entry);
|
|
parameter_lists.push(response_params);
|
|
}
|
|
Ok(Response::DataList(parameter_lists))
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Debug for Response {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
Response::Ok => {
|
|
write!(f, "Ok")
|
|
}
|
|
Response::Data(params) => {
|
|
write!(f, "Data:")?;
|
|
write!(f, "{:?};", params)?;
|
|
Ok(())
|
|
}
|
|
Response::DataList(params_list) => {
|
|
write!(f, "DataList:")?;
|
|
for params in params_list {
|
|
write!(f, "{:?};", params)?;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Display for Response {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
match self {
|
|
Response::Ok => {
|
|
write!(f, "Ok")
|
|
}
|
|
Response::Data(params) => {
|
|
for param in params {
|
|
write!(f, "{};", param)?;
|
|
}
|
|
Ok(())
|
|
}
|
|
Response::DataList(params_list) => {
|
|
for params in params_list {
|
|
write!(f, "[")?;
|
|
for param in params {
|
|
write!(f, "{};", param)?;
|
|
}
|
|
write!(f, "]")?;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl ResponseError {
|
|
pub fn is_error_okay(&self) -> bool {
|
|
self.id == 0
|
|
}
|
|
|
|
fn create_error(params: &Vec<Parameter>) -> ResponseError {
|
|
ResponseError {
|
|
id: parameter_find(params, "id")
|
|
.unwrap_or_else(|| Parameter::new(String::from("id"), String::from("-1")))
|
|
.to_i32(-1),
|
|
msg: parameter_find(params, "msg")
|
|
.unwrap_or_else(|| Parameter::new(String::from("msg"), String::from("Unknown error.")))
|
|
.value,
|
|
}
|
|
}
|
|
} |