跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[Rust] 请教一个 Rust 问题,提前祝大家中秋节快乐


小天管理

已推荐帖子

最近接触 rust ,心血来潮想写一个 rdb 解析工具,目前 aux 部分解析完成,但是每次解析出来的值都会覆盖掉之前的值,导致最后结果为空,以下是代码,跪求各位大佬解答 orz:

impl ParserFactory {
    pub fn parse(rdb_context: &[u8]) -> Result<RDBInfo> {
        let mut cursor = Cursor::new(rdb_context);
        let base_info = BaseInfo::parse(&mut cursor)?;
        let rdb_version:usize = base_info.rdb_version.parse().expect("Not a valid number");
        let mut aux_info = None;
        let mut db_info=  None;



        // aux 只有 rdb 版本大于等于 7 才引入
        if rdb_version < 7 {
            aux_info = None
        };

        loop {
            // 读取标志位
            let mut flag_byte = [0;1];
            if cursor.read_exact(&mut flag_byte).is_err(){
                break
            }
            match flag_byte[0] {
                FA => {
                    aux_info = Some(AuxInfo::parse(&mut cursor)?);
                }
                FE => {
                    db_info = Some(DbInfo::parse(&mut cursor)?);
                }

                FF => {
                    println!("parse done.");
                    break
                }
                _ =>{
                    continue;
                }
            }
        }

        // 组合 RDBInfo
        let rdb_info = RDBInfo {
            base_info,
            aux_info: aux_info.unwrap_or_else(|| AuxInfo {
                redis_server_version: String::new(),
                used_mem:0,
            }),
        };

        Ok(rdb_info)
    }

}
impl Parser for AuxInfo {
    fn parse(cursor: &mut Cursor<&[u8]>) -> Result<AuxInfo> {
        let mut aux_info = AuxInfo {
            redis_server_version: String::new(),
            used_mem: 0,
        };
        let aux_name = parser_aux_name(cursor)?;

        match aux_name.as_str() {
            "redis-ver" => {
                aux_info.redis_server_version = parser_aux_value(cursor)?;
            }
            "used-mem" => {
                aux_info.used_mem = parser_aux_value(cursor)?.parse::<usize>().expect("Failed to parse used-mem");
            }

            _ => {

            }
        }
        Ok(aux_info)
    }
}
意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

  • 游客注册

    游客注册

  • 会员

    没有会员可显示

  • 最新的状态更新

    没有最新的状态更新
  • 最近查看

    • 没有会员查看此页面.
×
×
  • 创建新的...