|
|
|
@ -17,6 +17,7 @@ use crate::{User, UserStatus}; |
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
|
pub enum ServerResponse {
|
|
|
|
ConnectToPeerResponse(ConnectToPeerResponse),
|
|
|
|
ExcludedSearchPhrasesResponse(ExcludedSearchPhrasesResponse),
|
|
|
|
FileSearchResponse(FileSearchResponse),
|
|
|
|
LoginResponse(LoginResponse),
|
|
|
|
PeerAddressResponse(PeerAddressResponse),
|
|
|
|
@ -49,6 +50,10 @@ impl ValueEncode for ServerResponse { |
|
|
|
encoder.encode_u32(CODE_CONNECT_TO_PEER)?;
|
|
|
|
response.encode_to(encoder)?;
|
|
|
|
}
|
|
|
|
ServerResponse::ExcludedSearchPhrasesResponse(ref response) => {
|
|
|
|
encoder.encode_u32(CODE_EXCLUDED_SEARCH_PHRASES)?;
|
|
|
|
response.encode_to(encoder)?;
|
|
|
|
}
|
|
|
|
ServerResponse::FileSearchResponse(ref response) => {
|
|
|
|
encoder.encode_u32(CODE_FILE_SEARCH)?;
|
|
|
|
response.encode_to(encoder)?;
|
|
|
|
@ -130,6 +135,10 @@ impl ValueDecode for ServerResponse { |
|
|
|
let response = decoder.decode()?;
|
|
|
|
ServerResponse::ConnectToPeerResponse(response)
|
|
|
|
}
|
|
|
|
CODE_EXCLUDED_SEARCH_PHRASES => {
|
|
|
|
let response = decoder.decode()?;
|
|
|
|
ServerResponse::ExcludedSearchPhrasesResponse(response)
|
|
|
|
}
|
|
|
|
CODE_FILE_SEARCH => {
|
|
|
|
let response = decoder.decode()?;
|
|
|
|
ServerResponse::FileSearchResponse(response)
|
|
|
|
@ -260,6 +269,38 @@ impl ValueDecode for ConnectToPeerResponse { |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*=========================*
|
|
|
|
* EXCLUDED SEARCH PHRASES *
|
|
|
|
*=========================*/
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
|
pub struct ExcludedSearchPhrasesResponse {
|
|
|
|
pub phrases: Vec<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<ExcludedSearchPhrasesResponse> for ServerResponse {
|
|
|
|
fn from(response: ExcludedSearchPhrasesResponse) -> Self {
|
|
|
|
Self::ExcludedSearchPhrasesResponse(response)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ValueEncode for ExcludedSearchPhrasesResponse {
|
|
|
|
fn encode_to(
|
|
|
|
&self,
|
|
|
|
encoder: &mut ValueEncoder,
|
|
|
|
) -> Result<(), ValueEncodeError> {
|
|
|
|
encoder.encode(&self.phrases)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ValueDecode for ExcludedSearchPhrasesResponse {
|
|
|
|
fn decode_from(decoder: &mut ValueDecoder) -> Result<Self, ValueDecodeError> {
|
|
|
|
let phrases = decoder.decode()?;
|
|
|
|
|
|
|
|
Ok(ExcludedSearchPhrasesResponse { phrases })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*=============*
|
|
|
|
* FILE SEARCH *
|
|
|
|
*=============*/
|
|
|
|
@ -1155,6 +1196,15 @@ mod tests { |
|
|
|
))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn roundtrip_excluded_search_phrases() {
|
|
|
|
roundtrip(ServerResponse::ExcludedSearchPhrasesResponse(
|
|
|
|
ExcludedSearchPhrasesResponse {
|
|
|
|
phrases: vec!["yo".to_string(), "lo".to_string()],
|
|
|
|
},
|
|
|
|
))
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn roundtrip_file_search() {
|
|
|
|
roundtrip(ServerResponse::FileSearchResponse(FileSearchResponse {
|
|
|
|
|