1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-20 16:35:17 +00:00

Get the list of conversations of the user

This commit is contained in:
2020-06-04 19:01:35 +02:00
parent e92b3ef821
commit 620328b33b
8 changed files with 218 additions and 5 deletions

View File

@ -0,0 +1,57 @@
//! # Conversation API object
//!
//! @author Pierre Hubert
use serde::{Serialize, Serializer};
use crate::api_data::legacy_api_bool::LegacyBool;
use crate::data::conversation::Conversation;
/// Special implementation of conversation name (false if none / the name otherwise)
struct ConvName(Option<String>);
impl Serialize for ConvName {
fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer {
match &self.0 {
None => serializer.serialize_bool(false),
Some(n) => serializer.serialize_str(n)
}
}
}
#[derive(Serialize)]
#[allow(non_snake_case)]
pub struct ConversationAPI {
ID: u64,
ID_owner: u64,
last_active: u64,
name: ConvName,
following: LegacyBool,
saw_last_message: LegacyBool,
members: Vec<u64>,
canEveryoneAddMembers: bool,
can_have_call: bool,
can_have_video_call: bool,
has_call_now: bool,
}
impl ConversationAPI {
/// Construct a new Conversation instance
pub fn new(conv: &Conversation) -> ConversationAPI {
ConversationAPI {
ID: conv.id,
ID_owner: conv.owner_id as u64,
last_active: conv.last_active,
name: ConvName(conv.name.clone()),
following: LegacyBool(conv.following),
saw_last_message: LegacyBool(conv.saw_last_message),
members: conv.members.iter().map(|x| x.clone() as u64).collect(),
canEveryoneAddMembers: conv.can_everyone_add_members,
// TODO : update when call system is implemented
can_have_call: false,
can_have_video_call: false,
has_call_now: false
}
}
}

View File

@ -0,0 +1,20 @@
//! # Legacy API boolean
//!
//! true => 1
//! false => 0
use serde::{Serialize, Serializer};
/// Special implementation of conversation name (false if none / the name otherwise)
pub struct LegacyBool(pub bool);
impl Serialize for LegacyBool {
fn serialize<S>(&self, serializer: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where
S: Serializer {
match &self.0 {
true => serializer.serialize_i8(1),
false => serializer.serialize_i8(0),
}
}
}

View File

@ -14,4 +14,6 @@ pub mod user_info;
pub mod custom_emoji;
pub mod res_find_user_by_virtual_directory;
pub mod res_find_virtual_directory;
pub mod res_create_conversation;
pub mod res_create_conversation;
pub mod conversation_api;
mod legacy_api_bool;