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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use std::collections::{HashMap, VecDeque};

use crate::consumer::Consumer;
use crate::message::*;

#[derive(Clone,Debug,PartialEq)]
pub struct Binding {
  pub exchange:    String,
  pub routing_key: String,
  pub no_wait:     bool,
  pub active:      bool,
}

impl Binding {
  pub fn new(exchange: String, routing_key: String, no_wait: bool) -> Binding {
    Binding {
      exchange:    exchange,
      routing_key: routing_key,
      no_wait:     no_wait,
      active:      false,
    }
  }
}

#[derive(Debug)]
pub struct Queue {
  pub name:                String,
  pub bindings:            HashMap<(String, String), Binding>,
  pub consumers:           HashMap<String, Consumer>,
  pub message_count:       u32,
  pub consumer_count:      u32,
  pub get_messages:        VecDeque<BasicGetMessage>,
  pub current_get_message: Option<BasicGetMessage>,
}

impl Queue {
  pub fn new(name: String, message_count: u32, consumer_count: u32) -> Queue {
    Queue {
      name,
      bindings:            HashMap::new(),
      consumers:           HashMap::new(),
      message_count,
      consumer_count,
      get_messages:        VecDeque::new(),
      current_get_message: None,
    }
  }

  pub fn next_basic_get_message(&mut self) -> Option<BasicGetMessage> {
    self.get_messages.pop_front()
  }
}