@@ -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
113113impl < 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 {
0 commit comments