Skip to content

Instantly share code, notes, and snippets.

@rust-play
Created April 21, 2019 16:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rust-play/16fe2cfa34c2e77917aa9360ce62f45e to your computer and use it in GitHub Desktop.
Save rust-play/16fe2cfa34c2e77917aa9360ce62f45e to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
use serde; // 1.0.90
use serde::ser::{SerializeSeq, Serializer};
use serde::Serialize;
use serde_urlencoded; // 0.5.4
fn main() {
let p = P {
ids: vec!["1", "2"],
};
println!("{}", serde_urlencoded::to_string(&p).unwrap());
println!("{}", "-".repeat(100));
let params = Params {
ids: IdParams(vec!["1", "2"]),
};
println!("{}", serde_urlencoded::to_string(&params).unwrap());
}
struct P<'a> {
ids: Vec<&'a str>,
}
impl<'a> Serialize for P<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut seq = serializer.serialize_seq(Some(self.ids.len()))?;
for e in &self.ids {
seq.serialize_element(&("id", e))?;
}
seq.end()
}
}
struct IdParams<'a>(Vec<&'a str>);
impl<'a> Serialize for IdParams<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut seq = serializer.serialize_seq(Some(self.0.len()))?;
for e in &self.0 {
seq.serialize_element(&("id", e))?;
}
seq.end()
}
}
#[derive(Serialize)]
struct Params<'a> {
ids: IdParams<'a>,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment