1use std::borrow::Cow;
2
3use crate::{ByteStr, ByteString};
4
5#[derive(Debug, Clone)]
6pub enum Domain<'a> {
7 Name(&'a ByteStr),
8 Literal(ByteString),
9}
10#[derive(Debug, Clone)]
11pub struct AddrSpec<'a> {
12 pub local_part: Cow<'a, ByteStr>,
13 pub domain: Domain<'a>,
14}
15
16#[derive(Debug, Clone)]
17pub struct Mailbox<'a> {
18 pub display_name: Vec<ByteString>,
19 pub addr_spec: AddrSpec<'a>,
20}
21
22#[derive(Debug, Clone)]
23pub struct Group<'a> {
24 pub display_name: Vec<ByteString>,
25 pub mailboxes: Vec<Mailbox<'a>>,
26}
27
28#[derive(Debug, Clone)]
29pub enum Address<'a> {
30 Mailbox(Mailbox<'a>),
31 Group(Group<'a>),
32}