Skip to content

Commit ab53b2c

Browse files
committed
Expose some parsing components
1 parent e7744fe commit ab53b2c

2 files changed

Lines changed: 17 additions & 12 deletions

File tree

uesave/src/context.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ impl Scope {
8282
}
8383

8484
#[derive(Debug)]
85-
pub(crate) struct SaveGameArchive<S> {
85+
pub struct SaveGameArchive<S> {
8686
pub(crate) stream: S,
8787
pub(crate) version: Option<Header>,
8888
pub(crate) types: Rc<Types>,
@@ -111,27 +111,33 @@ impl<W: Write + Seek> Write for SaveGameArchive<W> {
111111
}
112112

113113
impl<S> SaveGameArchive<S> {
114-
pub(crate) fn run<F, T>(stream: S, f: F) -> T
115-
where
116-
F: FnOnce(&mut SaveGameArchive<S>) -> T,
117-
{
118-
f(&mut SaveGameArchive {
114+
/// Construct a new archive around `stream`. The version (Header) must be set
115+
/// via [`set_version`](Self::set_version) before reading any property data,
116+
/// since property serialization depends on engine/package versions.
117+
pub fn new(stream: S) -> Self {
118+
SaveGameArchive {
119119
stream,
120120
version: None,
121121
types: Rc::new(Types::new()),
122122
scope: Scope::root(),
123123
log: false,
124124
error_to_raw: false,
125125
schemas: Rc::new(RefCell::new(PropertySchemas::new())),
126-
})
126+
}
127+
}
128+
pub(crate) fn run<F, T>(stream: S, f: F) -> T
129+
where
130+
F: FnOnce(&mut SaveGameArchive<S>) -> T,
131+
{
132+
f(&mut SaveGameArchive::new(stream))
127133
}
128134
fn path(&self) -> String {
129135
self.scope.path()
130136
}
131137
fn get_type(&self) -> Option<&StructType> {
132138
self.types.types.get(&self.path())
133139
}
134-
pub(crate) fn set_version(&mut self, version: Header) {
140+
pub fn set_version(&mut self, version: Header) {
135141
self.version = Some(version);
136142
}
137143
pub(crate) fn version(&self) -> &Header {

uesave/src/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ mod serialization;
3636
mod tests;
3737

3838
pub use archive::{ArchiveReader, ArchiveType, ArchiveWriter, SaveGameArchiveType};
39-
pub use context::{PropertySchemas, Scope, Types};
39+
pub use context::{PropertySchemas, SaveGameArchive, Scope, Types};
4040
pub use error::{Error, ParseError};
4141

4242
use byteorder::{ReadBytesExt, WriteBytesExt, LE};
43-
use context::SaveGameArchive;
4443
use std::{
4544
borrow::Cow,
4645
cell::RefCell,
@@ -4473,8 +4472,8 @@ impl CustomFormatData {
44734472

44744473
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44754474
pub struct PackageVersion {
4476-
ue4: u32,
4477-
ue5: Option<u32>,
4475+
pub ue4: u32,
4476+
pub ue5: Option<u32>,
44784477
}
44794478

44804479
pub trait VersionInfo {

0 commit comments

Comments
 (0)