| // run-rustfix |
| #![allow(unreachable_code)] |
| |
| fn some_func(a: Option<u32>) -> Option<u32> { |
| a?; |
| |
| a |
| } |
| |
| fn some_other_func(a: Option<u32>) -> Option<u32> { |
| if a.is_none() { |
| return None; |
| } else { |
| return Some(0); |
| } |
| unreachable!() |
| } |
| |
| pub enum SeemsOption<T> { |
| Some(T), |
| None, |
| } |
| |
| impl<T> SeemsOption<T> { |
| pub fn is_none(&self) -> bool { |
| match *self { |
| SeemsOption::None => true, |
| SeemsOption::Some(_) => false, |
| } |
| } |
| } |
| |
| fn returns_something_similar_to_option(a: SeemsOption<u32>) -> SeemsOption<u32> { |
| if a.is_none() { |
| return SeemsOption::None; |
| } |
| |
| a |
| } |
| |
| pub struct CopyStruct { |
| pub opt: Option<u32>, |
| } |
| |
| impl CopyStruct { |
| #[rustfmt::skip] |
| pub fn func(&self) -> Option<u32> { |
| (self.opt)?; |
| |
| self.opt?; |
| |
| let _ = Some(self.opt?); |
| |
| let _ = self.opt?; |
| |
| self.opt |
| } |
| } |
| |
| #[derive(Clone)] |
| pub struct MoveStruct { |
| pub opt: Option<Vec<u32>>, |
| } |
| |
| impl MoveStruct { |
| pub fn ref_func(&self) -> Option<Vec<u32>> { |
| self.opt.as_ref()?; |
| |
| self.opt.clone() |
| } |
| |
| pub fn mov_func_reuse(self) -> Option<Vec<u32>> { |
| self.opt.as_ref()?; |
| |
| self.opt |
| } |
| |
| pub fn mov_func_no_use(self) -> Option<Vec<u32>> { |
| self.opt.as_ref()?; |
| Some(Vec::new()) |
| } |
| |
| pub fn if_let_ref_func(self) -> Option<Vec<u32>> { |
| let v: &Vec<_> = self.opt.as_ref()?; |
| |
| Some(v.clone()) |
| } |
| |
| pub fn if_let_mov_func(self) -> Option<Vec<u32>> { |
| let v = self.opt?; |
| |
| Some(v) |
| } |
| } |
| |
| fn main() { |
| some_func(Some(42)); |
| some_func(None); |
| some_other_func(Some(42)); |
| |
| let copy_struct = CopyStruct { opt: Some(54) }; |
| copy_struct.func(); |
| |
| let move_struct = MoveStruct { |
| opt: Some(vec![42, 1337]), |
| }; |
| move_struct.ref_func(); |
| move_struct.clone().mov_func_reuse(); |
| move_struct.mov_func_no_use(); |
| |
| let so = SeemsOption::Some(45); |
| returns_something_similar_to_option(so); |
| } |