1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use postgres_types::ToSql;

type BucketValue = dyn ToSql + Sync;

pub struct Bucket {
  content: Vec<Box<BucketValue>>,
}

impl Bucket {
  pub fn new() -> Bucket {
    Bucket { content: vec![] }
  }

  pub fn get_refs(self) -> Vec<&'static BucketValue> {
    let mut args: Vec<&BucketValue> = vec![];
    for item in self.content {
      args.push(Box::leak(item));
    }
    args
  }

  pub fn push<T: 'static + ToSql + Sync + Clone>(&mut self, value: T) -> usize {
    self.content.push(Box::new(value));
    self.content.len()
  }

  pub fn len(&self) -> usize {
    self.content.len()
  }
}