Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. use std::convert::TryFrom;
  2.  
  3. #[derive(Debug)]
  4. struct Src {
  5. fld1: Option<String>,
  6. }
  7.  
  8. #[derive(Debug)]
  9. struct Dst {
  10. fld2: String,
  11. }
  12.  
  13. #[derive(Debug)]
  14. pub struct ConvertError<'a> {
  15. msg: &'a str,
  16. }
  17.  
  18. impl<'a> TryFrom<'a Src> for Dst {
  19. type Error = ConvertError<'a>;
  20.  
  21. fn try_from(src: Src) -> Result<Self, Self::Error> {
  22. let s = src
  23. .fld1
  24. .ok_or(ConvertError {
  25. msg: "damn",
  26. })
  27. .and_then(|val| Ok(val))?;
  28. Ok(Dst { fld2: s })
  29. }
  30. }
  31.  
  32. fn main() {
  33. let src = Src { fld1: None };
  34. let src1 = Src {
  35. fld1: Some(String::from("ciao")),
  36. };
  37. println!("{:?}", Dst::try_from(src));
  38. println!("{:?}", Dst::try_from(src1));
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement