This provides a non-copying API, which is generally favourable. The other accessors were removed, because the intent was to provide this "most sensible" API via the "default" (i.e. shortest, most concisely named) functions.
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
// Copyright (c) 2023 xmpp-rs contributors.
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
use tokio_xmpp::connect::ServerConnector;
|
|
use tokio_xmpp::{parsers::message::Message, Jid};
|
|
|
|
use crate::{delay::StanzaTimeInfo, Agent, Event};
|
|
|
|
pub async fn handle_message_group_chat<C: ServerConnector>(
|
|
agent: &mut Agent<C>,
|
|
events: &mut Vec<Event>,
|
|
from: Jid,
|
|
message: &Message,
|
|
time_info: StanzaTimeInfo,
|
|
) {
|
|
let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect();
|
|
|
|
if let Some((_lang, subject)) = message.get_best_subject(langs.clone()) {
|
|
events.push(Event::RoomSubject(
|
|
from.to_bare(),
|
|
from.resource().map(|x| x.to_string()),
|
|
subject.0.clone(),
|
|
time_info.clone(),
|
|
));
|
|
}
|
|
|
|
if let Some((_lang, body)) = message.get_best_body(langs) {
|
|
let event = match from.clone() {
|
|
Jid::Full(full) => Event::RoomMessage(
|
|
message.id.clone(),
|
|
from.to_bare(),
|
|
full.resource().to_string(),
|
|
body.clone(),
|
|
time_info,
|
|
),
|
|
Jid::Bare(bare) => {
|
|
Event::ServiceMessage(message.id.clone(), bare, body.clone(), time_info)
|
|
}
|
|
};
|
|
events.push(event)
|
|
}
|
|
}
|