cyfs_core/im/
remove_friend.rs1use crate::CoreObjectType;
2use cyfs_base::*;
3use serde::Serialize;
4
5#[derive(Clone, ProtobufEncode, ProtobufDecode, ProtobufTransform, Serialize)]
6#[cyfs_protobuf_type(crate::codec::protos::RemoveFriendDescContent)]
7pub struct RemoveFriendDescContent {
8 to: PeopleId,
9}
10
11impl DescContent for RemoveFriendDescContent {
12 fn obj_type() -> u16 {
13 CoreObjectType::RemoveFriend as u16
14 }
15
16 fn format(&self) -> u8 {
17 OBJECT_CONTENT_CODEC_FORMAT_PROTOBUF
18 }
19
20 type OwnerType = Option<ObjectId>;
21 type AreaType = SubDescNone;
22 type AuthorType = Option<ObjectId>;
23 type PublicKeyType = SubDescNone;
24}
25
26type RemoveFriendType = NamedObjType<RemoveFriendDescContent, EmptyProtobufBodyContent>;
27type RemoveFriendBuilder = NamedObjectBuilder<RemoveFriendDescContent, EmptyProtobufBodyContent>;
28
29pub type RemoveFriendId = NamedObjectId<RemoveFriendType>;
30pub type RemoveFriend = NamedObjectBase<RemoveFriendType>;
31
32impl RemoveFriendDescContent {
33 pub fn new(to: PeopleId) -> Self {
34 Self { to }
35 }
36}
37
38pub trait RemoveFriendObject {
39 fn create(owner: PeopleId, author: ObjectId, to: PeopleId) -> Self;
40 fn to(&self) -> &PeopleId;
41}
42
43impl RemoveFriendObject for RemoveFriend {
44 fn create(owner: PeopleId, author: ObjectId, to: PeopleId) -> Self {
45 let desc = RemoveFriendDescContent::new(to);
46 RemoveFriendBuilder::new(desc, EmptyProtobufBodyContent::default())
47 .owner(owner.into())
48 .author(author)
49 .build()
50 }
51
52 fn to(&self) -> &PeopleId {
53 &self.desc().content().to
54 }
55}
56#[cfg(test)]
57mod test {
58 use super::{RemoveFriend, RemoveFriendObject};
59 use cyfs_base::{NamedObject, ObjectDesc, People, PrivateKey, RawConvertTo, RawDecode};
60
61 #[test]
62 fn test() {
63 let secret1 = PrivateKey::generate_rsa(1024).unwrap();
64 let people1 = People::new(None, vec![], secret1.public(), None, None, None)
65 .build()
66 .desc()
67 .people_id();
68 let _people2 = People::new(None, vec![], secret1.public(), None, None, None)
69 .build()
70 .desc()
71 .people_id();
72
73 let add1 = RemoveFriend::create(
74 people1.clone(),
75 people1.object_id().to_owned(),
76 people1.clone(),
77 );
78 let buf = add1.to_vec().unwrap();
79 let (add2, _) = RemoveFriend::raw_decode(&buf).unwrap();
80 assert_eq!(add1.desc().calculate_id(), add2.desc().calculate_id())
81 }
82}