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 oasis_amqp_macros::amqp;
use serde::{self, Deserialize, Serialize};
use serde_bytes::Bytes;

use crate::Described;

#[amqp]
#[derive(Debug, PartialEq, Serialize)]
pub enum Frame<'a> {
    Mechanisms(Mechanisms),
    Init(Init<'a>),
    Outcome(Outcome<'a>),
}

#[amqp(descriptor("amqp:sasl-mechanisms:list", 0x0000_0000_0000_0040))]
#[derive(Debug, PartialEq, Serialize)]
pub struct Mechanisms {
    pub sasl_server_mechanisms: Vec<Mechanism>,
}

#[amqp(descriptor("amqp:sasl-init:list", 0x0000_0000_0000_0041))]
#[derive(Debug, PartialEq, Serialize)]
pub struct Init<'a> {
    pub mechanism: Mechanism,
    #[serde(borrow)]
    pub initial_response: Option<&'a Bytes>,
    pub hostname: Option<&'a str>,
}

#[derive(Debug, Deserialize, PartialEq, Serialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum Mechanism {
    Anonymous,
    Plain,
    ScramSha1,
}

#[amqp(descriptor("amqp:sasl-outcome:list", 0x0000_0000_0000_0044))]
#[derive(Debug, PartialEq, Serialize)]
pub struct Outcome<'a> {
    pub code: Code,
    #[serde(borrow)]
    pub additional_data: Option<&'a Bytes>,
}

#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub enum Code {
    Ok,
    Auth,
    Sys,
    SysPerm,
    SysTemp,
}