Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate serde; // 1.0.84
- #[macro_use]
- extern crate serde_derive; // 1.0.84
- extern crate serde_json; // 1.0.34
- #[derive(Deserialize,Debug,Clone)]
- pub enum FooRequestField {
- Listof(Vec<String>),
- All(),
- No(),
- }
- impl Default for FooRequestField {
- fn default() -> FooRequestField { FooRequestField::All() }
- }
- impl serde::Serialize for FooRequestField {
- fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
- use self::FooRequestField::*;
- match self {
- Listof(l) => {
- use serde::ser::SerializeSeq;
- let mut seq = s.serialize_seq(Some(l.len()))?;
- for e in l { seq.serialize_element(e)?; }
- seq.end()
- },
- All() => s.serialize_str("all"),
- No() => s.serialize_none(),
- }
- }
- }
- #[derive(Serialize,Deserialize,Debug,Clone,Default)]
- pub struct FooRequest {
- pub a: FooRequestField,
- pub b: FooRequestField,
- pub c: FooRequestField,
- }
- impl FooRequest {
- pub fn new() -> FooRequest { FooRequest::default() }
- // Yeah…
- pub fn no_a(self) -> FooRequest { FooRequest { a: FooRequestField::No(), ..self } }
- pub fn no_b(self) -> FooRequest { FooRequest { b: FooRequestField::No(), ..self } }
- pub fn no_c(self) -> FooRequest { FooRequest { c: FooRequestField::No(), ..self } }
- pub fn all_a(self) -> FooRequest { FooRequest { a: FooRequestField::All(), ..self } }
- pub fn all_b(self) -> FooRequest { FooRequest { b: FooRequestField::All(), ..self } }
- pub fn all_c(self) -> FooRequest { FooRequest { c: FooRequestField::All(), ..self } }
- pub fn a(self, v: Vec<String>) -> FooRequest { FooRequest { a: FooRequestField::Listof(v), ..self } }
- pub fn b(self, v: Vec<String>) -> FooRequest { FooRequest { b: FooRequestField::Listof(v), ..self } }
- pub fn c(self, v: Vec<String>) -> FooRequest { FooRequest { c: FooRequestField::Listof(v), ..self } }
- }
- fn main() {
- println!("{}", serde_json::to_string_pretty(&FooRequest::new().no_a().all_b().c(vec!["c1".to_string(),"c2".to_string()])).unwrap());
- }
Add Comment
Please, Sign In to add comment