// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. fn some_func(a: Option) -> Option { if a.is_none() { return None; } a } pub enum SeemsOption { Some(T), None, } impl SeemsOption { pub fn is_none(&self) -> bool { match *self { SeemsOption::None => true, SeemsOption::Some(_) => false, } } } fn returns_something_similar_to_option(a: SeemsOption) -> SeemsOption { if a.is_none() { return SeemsOption::None; } a } pub struct SomeStruct { pub opt: Option, } impl SomeStruct { pub fn func(&self) -> Option { if (self.opt).is_none() { return None; } self.opt } } fn main() { some_func(Some(42)); some_func(None); let some_struct = SomeStruct { opt: Some(54) }; some_struct.func(); let so = SeemsOption::Some(45); returns_something_similar_to_option(so); }