Skip to content

Commit 3b4ad42

Browse files
committed
Fix borrowing error (it compiles!)
1 parent 27f4f74 commit 3b4ad42

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

src/configure/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use crate::{chat, e2ee, provider};
2222
use auto_mozilla::moz_autoconfigure;
2323
use auto_outlook::outlk_autodiscover;
2424
use provider::Server;
25-
use provider::{ImapServers, LoginParamNew, Protocol, SmtpServers, UsernamePattern};
25+
use provider::{ImapServers, LoginParamNew, Protocol, ServerParams, SmtpServers, UsernamePattern};
2626
use std::rc::Rc;
2727

2828
macro_rules! progress {
@@ -421,30 +421,30 @@ pub fn loginparam_new_to_old(context: &Context, servers: &LoginParamNew) -> Opti
421421
pub fn loginparam_old_to_new(p: LoginParam) -> LoginParamNew {
422422
LoginParamNew {
423423
addr: p.addr.clone(),
424-
imap: vec![Server {
424+
imap: vec![ServerParams {
425425
protocol: Protocol::IMAP,
426426
socket: if 0 != p.server_flags & DC_LP_IMAP_SOCKET_STARTTLS {
427427
provider::Socket::STARTTLS
428428
} else {
429429
provider::Socket::SSL
430430
}, // TODO what about plain? And if no socket was specified in the LoginParam?
431431
port: p.mail_port as u16,
432-
hostname: Rc::new(p.mail_server),
432+
hostname: p.mail_server,
433433
username_pattern: if p.mail_user.contains('@') {
434434
UsernamePattern::EMAIL
435435
} else {
436436
UsernamePattern::EMAILLOCALPART
437437
},
438438
}],
439-
smtp: vec![Server {
439+
smtp: vec![ServerParams {
440440
protocol: Protocol::SMTP,
441441
socket: if 0 != p.server_flags as usize & DC_LP_SMTP_SOCKET_STARTTLS {
442442
provider::Socket::STARTTLS
443443
} else {
444444
provider::Socket::SSL
445445
}, // TODO what about plain? And if no socket was specified in the LoginParam?
446446
port: p.send_port as u16,
447-
hostname: &Rc::new(p.send_server),
447+
hostname: p.send_server,
448448
username_pattern: if p.send_user.contains('@') {
449449
UsernamePattern::EMAIL
450450
} else {

src/provider/mod.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,17 @@ pub struct Server {
5151
pub username_pattern: UsernamePattern,
5252
}
5353

54-
pub type ImapServers = Vec<Server>;
55-
pub type SmtpServers = Vec<Server>;
54+
#[derive(Debug)]
55+
pub struct ServerParams {
56+
pub protocol: Protocol,
57+
pub socket: Socket,
58+
pub hostname: String,
59+
pub port: u16,
60+
pub username_pattern: UsernamePattern,
61+
}
62+
63+
pub type ImapServers = Vec<ServerParams>;
64+
pub type SmtpServers = Vec<ServerParams>;
5665

5766
#[derive(Debug)]
5867
pub struct LoginParamNew {
@@ -61,7 +70,7 @@ pub struct LoginParamNew {
6170
pub smtp: SmtpServers,
6271
}
6372

64-
impl Server {
73+
impl ServerParams {
6574
pub fn apply_username_pattern(&self, addr: String) -> String {
6675
match self.username_pattern {
6776
UsernamePattern::EMAIL => addr,
@@ -94,11 +103,17 @@ pub struct Provider {
94103
}
95104

96105
impl Provider {
97-
pub fn get_server(&self, protocol: Protocol) -> Vec<Server> {
106+
pub fn get_server(&self, protocol: Protocol) -> Vec<ServerParams> {
98107
self.server
99108
.iter()
100109
.filter(|s| s.protocol == protocol)
101-
.cloned()
110+
.map(|s| ServerParams {
111+
protocol: s.protocol.clone(),
112+
socket: s.socket.clone(),
113+
hostname: s.hostname.to_string(),
114+
port: s.port,
115+
username_pattern: s.username_pattern.clone(),
116+
})
102117
.collect()
103118
}
104119

@@ -148,13 +163,13 @@ mod tests {
148163

149164
let provider = get_provider_info("[email protected]").unwrap();
150165
assert!(provider.status == Status::OK);
151-
let server = provider.get_imap_server()[0];
166+
let server = &provider.get_imap_server()[0];
152167
assert_eq!(server.protocol, Protocol::IMAP);
153168
assert_eq!(server.socket, Socket::STARTTLS);
154169
assert_eq!(server.hostname, "imap.nauta.cu");
155170
assert_eq!(server.port, 143);
156171
assert_eq!(server.username_pattern, UsernamePattern::EMAIL);
157-
let server = provider.get_smtp_server()[0];
172+
let server = &provider.get_smtp_server()[0];
158173
assert_eq!(server.protocol, Protocol::SMTP);
159174
assert_eq!(server.socket, Socket::STARTTLS);
160175
assert_eq!(server.hostname, "smtp.nauta.cu");

0 commit comments

Comments
 (0)