cyfs_core/im/
friend_option.rs1use 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
37pub 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}