1 个不稳定版本
0.1.0 | 2021 年 6 月 9 日 |
---|
#10 in #索尼
31KB
662 行
pupper
索尼 PlayStation 3 PUP (PlayStation 更新包) 实现。
概述
PS3 通过名为 'PUP' 的文件格式接收软件更新。这些包实际上是 '平面' 文件系统:它们包含单个文件或 '段',但没有层次结构。
此包简化了 PUP 的创建和反序列化。
另请参阅
lib.rs
:
索尼 PlayStation 3 PUP (PlayStation 更新包) 实现。
概述
PS3 通过名为 'PUP' 的文件格式接收软件更新。这些包实际上是 '平面' 文件系统:它们包含单个文件或 '段',但没有层次结构。
此包简化了 PUP 的创建和反序列化。
示例
首先创建一个新的 [Pup
] 并为其分配一个映像版本
use pupper::{Pup, Segment};
let segments = Vec::<Segment>::new();
let image_version: u64 = 0xAAAA_BBBB;
let pup = Pup::new(segments.clone(), image_version);
assert_eq!(segments, pup.segments);
assert_eq!(image_version, pup.image_version);
如你所见,[Pup
] 在大多数情况下是一个 POD 类型。 Pup::image_version
是一个公开的 [u64
],而 Pup::segments
是透明的 [Vec<Segment>
。
现在创建一个段并将其添加到我们之前创建的 [Pup
] 中
use pupper::SegmentId;
#
let id = SegmentId(0x100);
let data = std::fs::read("foo.txt").unwrap();
let segment = Segment::new(id, data.clone());
// Segment is (mostly) a POD type, too!
assert_eq!(id, segment.id);
assert_eq!(data, segment.data);
pup.segments.push(segment.clone());
assert_eq!(segment, pup.segments[0]);
最后,让我们序列化整个 [Pup
]。然后,我们将对其进行反序列化以确认转换是无损的
use pupper::Pup;
use std::convert::TryFrom as _;
#
// Serialize the PUP.
let data = Vec::<u8>::from(&pup);
// Deserialize the PUP.
assert_eq!(Ok(pup), Pup::try_from(data.as_slice()));
依赖关系
~715KB