cyfs_core/im/
friend_option.rs

1use crate::CoreObjectType;
2use cyfs_base::*;
3use serde::Serialize;
4
5#[derive(Clone, Default, ProtobufEncode, ProtobufDecode, ProtobufTransform, Serialize)]
6#[cyfs_protobuf_type(crate::codec::protos::FriendOptionContent)]
7pub struct FriendOptionDescContent {
8    auto_confirm: Option<u8>,
9    msg: Option<String>,
10}
11
12impl DescContent for FriendOptionDescContent {
13    fn obj_type() -> u16 {
14        CoreObjectType::FriendOption as u16
15    }
16
17    fn format(&self) -> u8 {
18        OBJECT_CONTENT_CODEC_FORMAT_PROTOBUF
19    }
20
21    fn debug_info() -> String {
22        String::from("FriendOptionDescContent")
23    }
24
25    type OwnerType = Option<ObjectId>;
26    type AreaType = SubDescNone;
27    type AuthorType = Option<ObjectId>;
28    type PublicKeyType = SubDescNone;
29}
30
31type FriendOptionType = NamedObjType<FriendOptionDescContent, EmptyProtobufBodyContent>;
32type FriendOptionBuilder = NamedObjectBuilder<FriendOptionDescContent, EmptyProtobufBodyContent>;
33
34pub type FriendOptionId = NamedObjectId<FriendOptionType>;
35pub type FriendOption = NamedObjectBase<FriendOptionType>;
36
37//没有create time,靠签名更新事件来保持最新
38pub trait FriendOptionObject {
39    fn create(owner: PeopleId, auto_confirm: Option<bool>, msg: Option<String>) -> Self;
40    fn auto_confirm(&self) -> Option<bool>;
41    fn msg(&self) -> Option<&str>;
42}
43
44impl FriendOptionObject for FriendOption {
45    fn create(owner: PeopleId, auto_confirm: Option<bool>, msg: Option<String>) -> Self {
46        FriendOptionBuilder::new(
47            FriendOptionDescContent {
48                auto_confirm: auto_confirm.map(|b| if b { 1 } else { 0 }),
49                msg,
50            },
51            EmptyProtobufBodyContent {},
52        )
53        .owner(owner.into())
54        .no_create_time()
55        .build()
56    }
57
58    fn auto_confirm(&self) -> Option<bool> {
59        self.desc().content().auto_confirm.map(|v| v == 1)
60    }
61
62    fn msg(&self) -> Option<&str> {
63        self.desc()
64            .content()
65            .msg
66            .as_ref()
67            .map(|s| s.as_str())
68    }
69}