cyfs_base/base/
name.rs

1use crate::codec as cyfs_base;
2use crate::*;
3
4use std::collections::HashMap;
5use std::net::IpAddr;
6
7// name的最大长度(字符个数),需要小于base58编码后的object_id长度
8pub const CYFS_NAME_MAX_LENGTH: usize = 40;
9
10//name信息和obj-desc信息的一个核心不同就是不具备 自校验 性
11//使用name info的client必须通过可信的渠道(比如MetaChain)来确认了name当下的owner后,才能对其NameInfo进行检验
12#[derive(Clone, Copy, Eq, PartialEq, Debug, RawEncode, RawDecode)]
13#[repr(u8)]
14pub enum NameState {
15    Normal = 0,
16    Lock = 1,
17    Auction = 2,            //正常拍卖
18    ArrearsAuction = 3,     //欠费拍卖
19    ArrearsAuctionWait = 4, //欠费拍卖确认
20    ActiveAuction = 5,      //主动拍卖
21}
22
23impl From<i32> for NameState {
24    fn from(i: i32) -> Self {
25        match i {
26            0 => NameState::Normal,
27            1 => NameState::Lock,
28            2 => NameState::Auction,
29            3 => NameState::ArrearsAuction,
30            4 => NameState::ArrearsAuctionWait,
31            5 => NameState::ActiveAuction,
32            _ => {
33                unimplemented!()
34            }
35        }
36    }
37}
38
39#[derive(Clone, Debug, RawEncode, RawDecode)]
40pub enum NameLink {
41    ObjectLink(ObjectId),
42    OtherNameLink(String),
43    IPLink(IpAddr),
44}
45
46impl std::fmt::Display for NameLink {
47    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48        match self {
49            NameLink::ObjectLink(id) => {
50                write!(f, "link to obj {}", id)
51            }
52            NameLink::OtherNameLink(name) => {
53                write!(f, "link to name {}", name)
54            }
55            NameLink::IPLink(ip) => {
56                write!(f, "link to ip {}", ip)
57            }
58        }
59    }
60}
61
62#[derive(Clone, Debug, RawEncode, RawDecode)]
63pub struct NameRecord {
64    pub link: NameLink,
65    pub user_data: String,
66}
67
68//pub struct
69//类似DNS 的 TXT记录,现在先简单实现。后续会持续扩展可以在一个Name上合法绑定的信息
70#[derive(Clone, Debug, RawEncode, RawDecode)]
71pub struct NameInfo {
72    //子域名记录
73    pub sub_records: HashMap<String, NameRecord>,
74    //直接记录
75    pub record: NameRecord,
76    pub owner: Option<ObjectId>,
77}
78//
79// impl RawEncode for NameInfo {
80//     fn raw_measure(&self, _purpose: &Option<RawEncodePurpose>) -> BuckyResult<usize> {
81//         unimplemented!()
82//     }
83//
84//     fn raw_encode<'a>(&self, _buf: &'a mut [u8]) -> BuckyResult<&'a mut [u8]> {
85//         unimplemented!()
86//     }
87// }
88//
89// impl <'de> RawDecode<'de> for NameInfo {
90//     fn raw_decode(_buf: &'de [u8]) -> BuckyResult<(Self, &'de [u8])> {
91//         unimplemented!()
92//     }
93// }