Abstract and simplify serde_json round-trip to Ruma Raw.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-09-23 04:26:55 +00:00
parent 27222f23d2
commit f32b6ae17d
2 changed files with 19 additions and 9 deletions

View File

@@ -17,7 +17,9 @@ use ruma::{
serde::Raw,
};
use serde_json::json;
use tuwunel_core::{Err, Result, debug, debug_error, debug_warn, err, result::NotFound};
use tuwunel_core::{
Err, Result, debug, debug_error, debug_warn, err, result::NotFound, utils::json,
};
use tuwunel_service::{Services, users::parse_master_key};
use crate::{Ruma, router::auth_uiaa};
@@ -537,16 +539,16 @@ where
.signatures
.append(&mut our_master_key.signatures);
}
let json = serde_json::to_value(master_key).expect("to_value always works");
let raw = serde_json::from_value(json).expect("Raw::from_value always works");
// Dont notify. A notification would trigger another key request resulting in
// an endless loop.
let notify = false;
let raw = Some(json::to_raw(master_key)?);
services
.users
.add_cross_signing_keys(
&user, &raw, &None, &None,
false, /* Dont notify. A notification would trigger another key
* request resulting in an endless loop */
)
.add_cross_signing_keys(&user, &raw, &None, &None, notify)
.await?;
if let Some(raw) = raw {
master_keys.insert(user.clone(), raw);
}

View File

@@ -1,9 +1,17 @@
use std::{fmt, marker::PhantomData, str::FromStr};
use ruma::{CanonicalJsonError, CanonicalJsonObject, canonical_json::try_from_json_map};
use ruma::{
CanonicalJsonError, CanonicalJsonObject, canonical_json::try_from_json_map, serde::Raw,
};
use crate::Result;
/// Perform a round-trip through serde_json starting with a native type T and
/// ending with a Ruma Raw<U> which is usually just T.
pub fn to_raw<T: serde::Serialize, U>(input: T) -> Result<Raw<U>> {
Ok(serde_json::from_value(serde_json::to_value(input)?)?)
}
/// Fallible conversion from any value that implements `Serialize` to a
/// `CanonicalJsonObject`.
///