use std::fmt::Debug; fn res_0(i: i32) -> Option<()> { if i > 0 { Some(()) } else { None } } fn res_1(i: i32) -> Option { if i > 0 { Some(true) } else { None } } fn res_2(i: i32) -> Option { if i > 0 { Some(-22) } else { None } } fn res_3(i: i32) -> Option { if i > 0 { Some(250) } else { None } } fn res_4(i: i32) -> Option { if i > 0 { Some(-22222) } else { None } } fn res_5(i: i32) -> Option { if i > 0 { Some(65432) } else { None } } fn res_6(i: i32) -> Option { if i > 0 { Some(-222_222) } else { None } } fn res_7(i: i32) -> Option { if i > 0 { Some(432_432) } else { None } } fn res_8(i: i32) -> Option { if i > 0 { Some(-22_222_222_222) } else { None } } fn res_9(i: i32) -> Option { if i > 0 { Some(23_232_232_232) } else { None } } fn res_10(i: i32) -> Option { if i > 0 { Some(-22_222_222_222) } else { None } } fn res_11(i: i32) -> Option { if i > 0 { Some(23_232_232_232) } else { None } } fn res_12(i: i32) -> Option { if i > 0 { Some(-22_222_222_222_222_222_222) } else { None } } fn res_13(i: i32) -> Option { if i > 0 { Some(33_333_333_333_333_333_333) } else { None } } fn res_14(i: i32) -> Option { if i > 0 { Some(111.111) } else { None } } fn res_15(i: i32) -> Option { if i > 0 { Some(222.222) } else { None } } fn res_16(i: i32) -> Option<&'static str> { if i > 0 { Some("hello") } else { None } } fn res_17(i: i32) -> Option { if i > 0 { Some(0x40 as char) } else { None } } fn res_18(i: i32) -> Option<&'static [u8]> { if i > 0 { Some(&[1,2,3]) } else { None } } fn res_19(i: i32) -> Option<&'static [char]> { if i > 0 { Some(&['🌊','🦦','🦀']) } else { None } } fn res_obj(i: i32) -> Option { if i > 0 { Some(Car { brand: "Ford", engine: Engine { config: EngineConfig::Inline { i: 4 }, pistons: vec![Piston(1), Piston(2), Piston(3), Piston(4)], }, gearbox: Gearbox::Manual, }) } else { None } } fn res_obj_ref<'a>(cars: &[Car], i: usize) -> Option<&Car> { Some(&cars[i]) } fn res_small(i: i32) -> Option { if i > 0 { Some(Small { i: Inner(12345678) }) } else { None } } fn res_box(i: i32) -> Option> { if i > 0 { Some(Box::new(Car { brand: "Nil", engine: Engine { config: EngineConfig::Inline { i: 0 }, pistons: vec![], }, gearbox: Gearbox::Automatic, })) } else { None } } fn res_enum(i: i32) -> Option { if i == 1 { Some(Gearbox::Automatic) } else if i == 2 { Some(Gearbox::Manual) } else { None } } #[derive(Debug)] struct Car { brand: &'static str, engine: Engine, gearbox: Gearbox, } #[derive(Debug)] struct Engine { config: EngineConfig, pistons: Vec, } #[derive(Debug)] struct Piston(u8); #[derive(Debug)] enum Gearbox { Automatic, Manual, } #[derive(Debug)] enum EngineConfig { Inline { i: i32 }, Vshape(i16, i16), } #[derive(Debug)] struct Small { i: Inner, } #[derive(Debug)] struct Inner(i32); trait Auto: Debug {} impl Auto for Car {} fn main() { let res = res_0(0); dbg!(&res); let res = res_0(2); dbg!(&res); let res = res_1(0); dbg!(&res); let res = res_1(2); dbg!(&res); let res = res_2(0); dbg!(&res); let res = res_2(2); dbg!(&res); let res = res_3(0); dbg!(&res); let res = res_3(2); dbg!(&res); let res = res_4(0); dbg!(&res); let res = res_4(2); dbg!(&res); let res = res_5(0); dbg!(&res); let res = res_5(2); dbg!(&res); let res = res_6(0); dbg!(&res); let res = res_6(2); dbg!(&res); let res = res_7(0); dbg!(&res); let res = res_7(2); dbg!(&res); let res = res_8(0); dbg!(&res); let res = res_8(2); dbg!(&res); let res = res_9(0); dbg!(&res); let res = res_9(2); dbg!(&res); let res = res_10(0); dbg!(&res); let res = res_10(2); dbg!(&res); let res = res_11(0); dbg!(&res); let res = res_11(2); dbg!(&res); let res = res_12(0); dbg!(&res); let res = res_12(2); dbg!(&res); let res = res_13(0); dbg!(&res); let res = res_13(2); dbg!(&res); let res = res_14(0); dbg!(&res); let res = res_14(2); dbg!(&res); let res = res_15(0); dbg!(&res); let res = res_15(2); dbg!(&res); let res = res_16(0); dbg!(&res); let res = res_16(2); dbg!(&res); let res = res_17(0); dbg!(&res); let res = res_17(2); dbg!(&res); let res = res_18(0); dbg!(&res); let res = res_18(2); dbg!(&res); let res = res_19(0); dbg!(&res); let res = res_19(2); dbg!(&res); let none = res_obj(0); dbg!(&none); let ford = res_obj(2); dbg!(&ford); let ford = ford.unwrap(); let mazda = Car { brand: "Mazda", engine: Engine { config: EngineConfig::Vshape(3, 3), pistons: vec![], }, gearbox: Gearbox::Automatic, }; let cars = [ford, mazda]; let car = res_obj_ref(&cars, 1); dbg!(car); let res = res_small(0); dbg!(&res); let res = res_small(2); dbg!(&res); let res = res_box(0); dbg!(&res); let res = res_box(2); dbg!(&res); let res = res_enum(0); dbg!(&res); let res = res_enum(1); dbg!(&res); let res = res_enum(2); dbg!(&res); }