@@ -25,7 +25,7 @@ use any_pointer;
25
25
use private:: arena:: { BuilderArenaImpl , ReaderArenaImpl , BuilderArena , ReaderArena } ;
26
26
use private:: layout;
27
27
use private:: units:: BYTES_PER_WORD ;
28
- use traits:: { FromPointerReader , FromPointerBuilder , SetPointerBuilder } ;
28
+ use traits:: { FromPointerReader , FromPointerBuilder , SetPointerBuilder , Owned } ;
29
29
use { OutputSegments , Result , Word } ;
30
30
31
31
/// Options controlling how data is read.
@@ -177,6 +177,30 @@ impl <S> Reader<S> where S: ReaderSegments {
177
177
}
178
178
}
179
179
180
+ /// A reader object that owns the underlying data in the message
181
+ pub struct OwnedReader < S , T >
182
+ where S : ReaderSegments ,
183
+ T : for < ' a > Owned < ' a > {
184
+ marker : :: std:: marker:: PhantomData < T > ,
185
+ message : Reader < S > ,
186
+ }
187
+
188
+ impl < S , T > OwnedReader < S , T >
189
+ where S : ReaderSegments ,
190
+ T : for < ' a > Owned < ' a > {
191
+
192
+ pub fn new ( message : Reader < S > ) -> Self {
193
+ OwnedReader {
194
+ marker : :: std:: marker:: PhantomData ,
195
+ message : message,
196
+ }
197
+ }
198
+
199
+ pub fn get < ' a > ( & ' a self ) -> Result < <T as Owned < ' a > >:: Reader > {
200
+ self . message . get_root ( )
201
+ }
202
+ }
203
+
180
204
/// An object that allocates memory for a Cap'n Proto message as it is being built.
181
205
pub unsafe trait Allocator {
182
206
/// Allocates memory for a new segment, returning a pointer to the start of the segment
0 commit comments