tuwunel_service/sending/
dest.rs1use std::fmt::Debug;
2
3use ruma::{OwnedServerName, OwnedUserId};
4use tuwunel_core::implement;
5
6#[derive(Clone, Debug, PartialEq, Eq, Hash)]
7pub enum Destination {
8 Appservice(String),
9 Push(OwnedUserId, String), Federation(OwnedServerName),
11}
12
13#[implement(Destination)]
14#[must_use]
15pub(super) fn get_prefix(&self) -> Vec<u8> {
16 match self {
17 | Self::Federation(server) => {
18 let len = server.as_bytes().len().saturating_add(1);
19
20 let mut p = Vec::with_capacity(len);
21 p.extend_from_slice(server.as_bytes());
22 p.push(0xFF);
23 p
24 },
25 | Self::Appservice(server) => {
26 let sigil = b"+";
27 let len = sigil
28 .len()
29 .saturating_add(server.len())
30 .saturating_add(1);
31
32 let mut p = Vec::with_capacity(len);
33 p.extend_from_slice(sigil);
34 p.extend_from_slice(server.as_bytes());
35 p.push(0xFF);
36 p
37 },
38 | Self::Push(user, pushkey) => {
39 let sigil = b"$";
40 let len = sigil
41 .len()
42 .saturating_add(user.as_bytes().len())
43 .saturating_add(1)
44 .saturating_add(pushkey.len())
45 .saturating_add(1);
46
47 let mut p = Vec::with_capacity(len);
48 p.extend_from_slice(sigil);
49 p.extend_from_slice(user.as_bytes());
50 p.push(0xFF);
51 p.extend_from_slice(pushkey.as_bytes());
52 p.push(0xFF);
53 p
54 },
55 }
56}