Skip to main content

substrate_data/wire/
stream_writer.rs

1//! [`StreamWriter`]: writes a [`Stream`]'s items as they come.
2
3use std::marker::PhantomData;
4
5use super::stream::Stream;
6use crate::binary::Writer;
7use crate::schema::Schema;
8
9/// Writes a [`Stream`]'s items as they come.
10#[derive(Debug)]
11pub struct StreamWriter<T> {
12    pub(super) w: Writer,
13    pub(super) len: usize,
14    pub(super) item: PhantomData<fn() -> T>,
15}
16
17impl<T: Schema> StreamWriter<T> {
18    /// Writes `item`.
19    pub fn push(&mut self, item: &T) {
20        item.encode(&mut self.w);
21        self.len += 1;
22    }
23
24    /// The stream written.
25    #[must_use]
26    pub fn finish(self) -> Stream<T> {
27        Stream::from_written(self.w.finish(), self.len)
28    }
29}