Rust中如何避免try_from消耗Read类型的可变引用?
Rust中从Read流反序列化嵌套结构体的TryFrom实现问题
我定义了如下结构体:
struct Triangle { normal: Normal, vertices: [Vertex; 3], }
我希望从Read类型反序列化该结构体。考虑到字节流转Triangle可能失败,我觉得实现TryFrom是符合Rust风格的做法,于是写了如下代码:
impl TryFrom<&mut dyn std::io::Read> for Triangle { type Error = std::io::Error; fn try_from(reader: &mut dyn std::io::Read) -> Result<Self, Self::Error> { Ok(Self { normal: Normal::try_from(reader)?, vertices: [Vertex::try_from(reader)?, Vertex::try_from(reader)?, Vertex::try_from(reader)?] }) } }
我可以把对reader: &mut Read的所有操作都放在Triangle的实现里,但我有两个顾虑:
- 希望每个对象的解析逻辑都放在各自的
impl块中 - 当我尝试解析多个
Triangle来构建网格时,还是会遇到同样的问题
我开始怀疑实现TryFrom是不是正确的方案,但在放弃之前,想请教有没有简洁的方法,能让Normal::try_from和Vertex::try_from依次借用reader,同时符合Rust的所有权规则。
(注:我知道STL格式中每个三角形后有一个u16属性,只是还没处理)
内容的提问来源于stack exchange,提问作者Dave Fol
相关产品推荐
相关产品推荐

