cyfs_lib/ndn/
bdt_request.rs1use crate::*;
2use cyfs_base::*;
3
4use serde_json::{Map, Value};
5use std::fmt;
6
7pub struct BdtDataRefererInfo {
9 pub target: Option<ObjectId>,
11 pub object_id: ObjectId,
12 pub inner_path: Option<String>,
13
14 pub dec_id: Option<ObjectId>,
16
17 pub req_path: Option<String>,
19
20 pub referer_object: Vec<NDNDataRefererObject>,
21 pub flags: u32,
22}
23
24impl fmt::Display for BdtDataRefererInfo {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 if let Some(target) = &self.target {
27 write!(f, ", target: {}", target)?;
28 }
29 write!(f, "object_id: {:?}", self.object_id)?;
30 if let Some(inner_path) = &self.inner_path {
31 write!(f, ", inner_path: {}", inner_path)?;
32 }
33
34 if let Some(dec_id) = &self.dec_id {
35 write!(f, ", dec_id: {}", dec_id)?;
36 }
37
38 write!(f, ", req_path: {:?}", self.req_path)?;
39 if !self.referer_object.is_empty() {
40 write!(f, ", referer_object: {:?}", self.referer_object)?;
41 }
42
43 write!(f, ", flags: {}", self.flags)?;
44
45 Ok(())
46 }
47}
48
49impl fmt::Debug for BdtDataRefererInfo {
50 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51 fmt::Display::fmt(&self, f)
52 }
53}
54
55impl JsonCodec<BdtDataRefererInfo> for BdtDataRefererInfo {
56 fn encode_json(&self) -> Map<String, Value> {
57 let mut obj = Map::new();
58 JsonCodecHelper::encode_option_string_field(&mut obj, "target", self.target.as_ref());
59 JsonCodecHelper::encode_string_field(&mut obj, "object_id", &self.object_id);
60 JsonCodecHelper::encode_option_string_field(&mut obj, "inner_path", self.inner_path.as_ref());
61
62 JsonCodecHelper::encode_option_string_field(&mut obj, "dec_id", self.dec_id.as_ref());
63 JsonCodecHelper::encode_option_string_field(&mut obj, "req_path", self.req_path.as_ref());
64
65 if self.referer_object.len() > 0 {
66 JsonCodecHelper::encode_str_array_field(
67 &mut obj,
68 "referer_object",
69 &self.referer_object,
70 );
71 }
72
73 JsonCodecHelper::encode_number_field(&mut obj, "flags", self.flags);
74
75 obj
76 }
77
78 fn decode_json(obj: &Map<String, Value>) -> BuckyResult<BdtDataRefererInfo> {
79 Ok(Self {
80 target: JsonCodecHelper::decode_option_string_field(obj,"target")?,
81 object_id: JsonCodecHelper::decode_string_field(obj,"object_id")?,
82 inner_path: JsonCodecHelper::decode_option_string_field(obj,"inner_path")?,
83 dec_id: JsonCodecHelper::decode_option_string_field(obj, "dec_id")?,
84 req_path: JsonCodecHelper::decode_option_string_field(obj, "req_path")?,
85 referer_object: JsonCodecHelper::decode_str_array_field(obj, "referer_object")?,
86 flags: JsonCodecHelper::decode_int_field(obj, "flags")?,
87 })
88 }
89}
90
91
92impl From<&NDNGetDataInputRequest> for BdtDataRefererInfo{
93 fn from(req: &NDNGetDataInputRequest) -> Self {
94 BdtDataRefererInfo {
95 target: None,
97 object_id: req.object_id.clone(),
98 inner_path: req.inner_path.clone(),
99 dec_id: req.common.source.get_opt_dec().cloned(),
100 req_path: req.common.req_path.clone(),
101 referer_object: req.common.referer_object.clone(),
102 flags: req.common.flags,
103 }
104 }
105}