Guest User

Untitled

a guest
Jan 18th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. extern crate serde; // 1.0.84
  2. #[macro_use]
  3. extern crate serde_derive; // 1.0.84
  4. extern crate serde_json; // 1.0.34
  5.  
  6. #[derive(Deserialize,Debug,Clone)]
  7. pub enum FooRequestField {
  8. Listof(Vec<String>),
  9. All(),
  10. No(),
  11. }
  12.  
  13. impl Default for FooRequestField {
  14. fn default() -> FooRequestField { FooRequestField::All() }
  15. }
  16.  
  17. impl serde::Serialize for FooRequestField {
  18. fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
  19. use self::FooRequestField::*;
  20. match self {
  21. Listof(l) => {
  22. use serde::ser::SerializeSeq;
  23. let mut seq = s.serialize_seq(Some(l.len()))?;
  24. for e in l { seq.serialize_element(e)?; }
  25. seq.end()
  26. },
  27. All() => s.serialize_str("all"),
  28. No() => s.serialize_none(),
  29. }
  30. }
  31. }
  32.  
  33. #[derive(Serialize,Deserialize,Debug,Clone,Default)]
  34. pub struct FooRequest {
  35. pub a: FooRequestField,
  36. pub b: FooRequestField,
  37. pub c: FooRequestField,
  38. }
  39.  
  40. impl FooRequest {
  41. pub fn new() -> FooRequest { FooRequest::default() }
  42. // Yeah…
  43. pub fn no_a(self) -> FooRequest { FooRequest { a: FooRequestField::No(), ..self } }
  44. pub fn no_b(self) -> FooRequest { FooRequest { b: FooRequestField::No(), ..self } }
  45. pub fn no_c(self) -> FooRequest { FooRequest { c: FooRequestField::No(), ..self } }
  46. pub fn all_a(self) -> FooRequest { FooRequest { a: FooRequestField::All(), ..self } }
  47. pub fn all_b(self) -> FooRequest { FooRequest { b: FooRequestField::All(), ..self } }
  48. pub fn all_c(self) -> FooRequest { FooRequest { c: FooRequestField::All(), ..self } }
  49. pub fn a(self, v: Vec<String>) -> FooRequest { FooRequest { a: FooRequestField::Listof(v), ..self } }
  50. pub fn b(self, v: Vec<String>) -> FooRequest { FooRequest { b: FooRequestField::Listof(v), ..self } }
  51. pub fn c(self, v: Vec<String>) -> FooRequest { FooRequest { c: FooRequestField::Listof(v), ..self } }
  52. }
  53.  
  54.  
  55. fn main() {
  56. println!("{}", serde_json::to_string_pretty(&FooRequest::new().no_a().all_b().c(vec!["c1".to_string(),"c2".to_string()])).unwrap());
  57. }
Add Comment
Please, Sign In to add comment