cyfs_core/im/
remove_friend.rs

1use 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}