ez_bencoding/decode/
str.rs

1use std::borrow::Cow;
2
3use super::{token::BdecodeTokenType, IBdecodeNode};
4
5crate::primitive_bdecode_node!(Str);
6
7impl Str {
8    /// 获取当前节点的字符串值
9    pub fn value(&self) -> Cow<[u8]> {
10        assert!(self.token_type() == BdecodeTokenType::Str);
11
12        let token = &self.tokens[self.token_index as usize];
13        let start = token.offset() as usize;
14        let header_size = token.header_size() as usize + 1;
15        let end = self.tokens[(self.token_index + 1) as usize].offset() as usize;
16
17        let buf = &self.buffer[start + header_size..end];
18        let rst = Cow::Borrowed(buf);
19
20        rst
21    }
22
23    pub fn to_json(&self) -> String {
24        let val = String::from_utf8_lossy_owned(self.value().into_owned());
25        format!(r#""{}""#, val)
26    }
27}