I'm trying to write a function that takes one of many predefined structs and deserializes data from a string into them. I then need to return the struct from the function. I don't believe I'm allowed to return a generic type from a function so tried wrapping it in a enum and pass it into the function but it doesn't like it. Am I doing this wrong or is there a better way to do this ?
Here is a good starting point:
use serde::{Deserialize, Serialize};
#[serde(deny_unknown_fields)]
#[serde(rename_all = "camelCase")]
#[derive(Serialize, Deserialize, Debug)]
struct SessionUserLogon {
user_id: String,
password: String,
language: Option<String>,
eleveate: Option<String>,
mobile_device_id: Option<String>,
}
#[serde(deny_unknown_fields)]
#[serde(rename_all = "camelCase")]
#[derive(Serialize, Deserialize, Debug)]
struct SessionUserLogout {
session_id: String,
}
fn main() {
let body = r#" {"sessionId": "foobar"} "#;
let logon_out: SessionUserLogout = serde_json::from_str(body).unwrap();
println!("{:?}", logon_out);
let body = r#" {"userId": "a", "password":"foobar"} "#;
let logon: SessionUserLogon = serde_json::from_str(body).unwrap();
println!("{:?}", logon);
}
Why so? Check this playground for a possible approach.
@Cerber-Ursi thanks that is what I'm after. Im struggling abit with the lifetimes in your example though as I'm reading client input into body which isn't <'static>. Any hints on how I should set the lifetimes for a String.
Replacing Deserialize<'static>
with serde::de::DeserializeOwned
works,
This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.