1use crate::format_element::FormatElement;
2
3pub trait Buffer {
4 fn write_element(&mut self, element: FormatElement);
5
6 fn write_elements<I>(&mut self, elements: I)
7 where
8 I: IntoIterator<Item = FormatElement>,
9 {
10 for element in elements {
11 self.write_element(element);
12 }
13 }
14
15 fn elements(&self) -> &[FormatElement];
16}
17
18#[derive(Debug, Clone, Default, PartialEq, Eq)]
19pub struct VecBuffer {
20 elements: Vec<FormatElement>,
21}
22
23impl VecBuffer {
24 #[must_use]
25 pub fn new() -> Self {
26 Self::default()
27 }
28
29 #[must_use]
30 pub fn with_capacity(capacity: usize) -> Self {
31 Self {
32 elements: Vec::with_capacity(capacity),
33 }
34 }
35
36 #[must_use]
37 pub fn as_slice(&self) -> &[FormatElement] {
38 &self.elements
39 }
40
41 #[must_use]
42 pub fn into_vec(self) -> Vec<FormatElement> {
43 self.elements
44 }
45}
46
47impl Buffer for VecBuffer {
48 fn write_element(&mut self, element: FormatElement) {
49 self.elements.push(element);
50 }
51
52 fn elements(&self) -> &[FormatElement] {
53 self.as_slice()
54 }
55}