Clean up and deduplicate parse_servercurrentevent()

This commit is contained in:
Lambda 2024-05-22 21:27:03 +00:00
parent 25353da8b8
commit 12e7f525aa

View file

@ -131,14 +131,13 @@ impl service::sending::Data for KeyValueDatabase {
} }
} }
#[tracing::instrument(skip(key))] #[tracing::instrument(skip(key, value))]
fn parse_servercurrentevent( fn parse_servercurrentevent(
key: &RequestKey, key: &RequestKey,
value: Vec<u8>, value: Vec<u8>,
) -> Result<(Destination, SendingEventType)> { ) -> Result<(Destination, SendingEventType)> {
let key = key.as_bytes(); let key = key.as_bytes();
// Appservices start with a plus let (destination, event) = if key.starts_with(b"+") {
Ok::<_, Error>(if key.starts_with(b"+") {
let mut parts = key[1..].splitn(2, |&b| b == 0xFF); let mut parts = key[1..].splitn(2, |&b| b == 0xFF);
let server = parts.next().expect("splitn always returns one element"); let server = parts.next().expect("splitn always returns one element");
@ -152,14 +151,7 @@ fn parse_servercurrentevent(
) )
})?; })?;
( (Destination::Appservice(server), event)
Destination::Appservice(server),
if value.is_empty() {
SendingEventType::Pdu(event.to_vec())
} else {
SendingEventType::Edu(value)
},
)
} else if key.starts_with(b"$") { } else if key.starts_with(b"$") {
let mut parts = key[1..].splitn(3, |&b| b == 0xFF); let mut parts = key[1..].splitn(3, |&b| b == 0xFF);
@ -183,15 +175,7 @@ fn parse_servercurrentevent(
Error::bad_database("Invalid bytes in servercurrentpdus.") Error::bad_database("Invalid bytes in servercurrentpdus.")
})?; })?;
( (Destination::Push(user_id, pushkey_string), event)
Destination::Push(user_id, pushkey_string),
if value.is_empty() {
SendingEventType::Pdu(event.to_vec())
} else {
// I'm pretty sure this should never be called
SendingEventType::Edu(value)
},
)
} else { } else {
let mut parts = key.splitn(2, |&b| b == 0xFF); let mut parts = key.splitn(2, |&b| b == 0xFF);
@ -200,23 +184,27 @@ fn parse_servercurrentevent(
Error::bad_database("Invalid bytes in servercurrentpdus.") Error::bad_database("Invalid bytes in servercurrentpdus.")
})?; })?;
let server = utils::string_from_bytes(server).map_err(|_| { let server = utils::string_from_bytes(server)
Error::bad_database( .map_err(|_| {
"Invalid server bytes in server_currenttransaction", Error::bad_database(
) "Invalid server bytes in server_currenttransaction",
})?; )
})?
( .try_into()
Destination::Normal(ServerName::parse(server).map_err(|_| { .map_err(|_| {
Error::bad_database( Error::bad_database(
"Invalid server string in server_currenttransaction", "Invalid server string in server_currenttransaction",
) )
})?), })?;
if value.is_empty() { (Destination::Normal(server), event)
SendingEventType::Pdu(event.to_vec()) };
} else {
SendingEventType::Edu(value) Ok((
}, destination,
) if value.is_empty() {
}) SendingEventType::Pdu(event.to_vec())
} else {
SendingEventType::Edu(value)
},
))
} }