context: LemmyContext,
) -> Result<String, LemmyError> {
let json: Value = serde_json::from_str(&msg)?;
- let data = &json
+ let data = json
.get("data")
- .ok_or_else(|| LemmyError::from_message("missing data"))?
- .to_string();
- let op = &json
+ .cloned()
+ .ok_or_else(|| LemmyError::from_message("missing data"))?;
+
+ let missing_op_err = || LemmyError::from_message("missing op");
+
+ let op = json
.get("op")
- .ok_or_else(|| LemmyError::from_message("missing op"))?
- .to_string();
+ .ok_or_else(missing_op_err)?
+ .as_str()
+ .ok_or_else(missing_op_err)?;
// check if api call passes the rate limit, and generate future for later execution
if let Ok(user_operation_crud) = UserOperationCrud::from_str(op) {
context: LemmyContext,
id: ConnectionId,
op: UserOperationCrud,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError> {
match op {
// User ops
context: LemmyContext,
id: ConnectionId,
op: UserOperationCrud,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError>
where
Data: PerformCrud + SendActivity<Response = <Data as PerformCrud>::Response>,
for<'de> Data: Deserialize<'de>,
{
- let parsed_data: Data = serde_json::from_str(data)?;
+ let parsed_data: Data = serde_json::from_value(data)?;
let res = parsed_data
.perform(&web::Data::new(context.clone()), Some(id))
.await?;
context: LemmyContext,
id: ConnectionId,
op: UserOperationApub,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError> {
match op {
UserOperationApub::GetPersonDetails => {
context: LemmyContext,
id: ConnectionId,
op: UserOperationApub,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError>
where
Data: PerformApub + SendActivity<Response = <Data as PerformApub>::Response>,
for<'de> Data: Deserialize<'de>,
{
- let parsed_data: Data = serde_json::from_str(data)?;
+ let parsed_data: Data = serde_json::from_value(data)?;
let res = parsed_data
.perform(&web::Data::new(context.clone()), Some(id))
.await?;
context: LemmyContext,
id: ConnectionId,
op: UserOperation,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError> {
match op {
// User ops
context: LemmyContext,
id: ConnectionId,
op: UserOperation,
- data: &str,
+ data: Value,
) -> result::Result<String, LemmyError>
where
Data: Perform + SendActivity<Response = <Data as Perform>::Response>,
for<'de> Data: Deserialize<'de>,
{
- let parsed_data: Data = serde_json::from_str(data)?;
+ let parsed_data: Data = serde_json::from_value(data)?;
let res = parsed_data
.perform(&web::Data::new(context.clone()), Some(id))
.await?;