use qs_rust::{DecodeOptions, EncodeOptions, Object, Value, decode, encode};
fn s(value: &str) -> Value {
Value::String(value.to_owned())
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let decoded = decode(
"user[name]=Ada&user[roles][]=admin&user[roles][]=editor",
&DecodeOptions::new(),
)?;
println!("decoded:\n{decoded:#?}");
let mut user = Object::new();
user.insert("name".to_owned(), s("Ada"));
user.insert(
"roles".to_owned(),
Value::Array(vec![s("admin"), s("editor")]),
);
let mut root = Object::new();
root.insert("user".to_owned(), Value::Object(user));
let encoded = encode(
&Value::Object(root),
&EncodeOptions::new().with_encode(false),
)?;
println!("encoded:\n{encoded}");
assert_eq!(
encoded,
"user[name]=Ada&user[roles][0]=admin&user[roles][1]=editor"
);
Ok(())
}