fn main() {
    match option {
        None => if condition {
            true
        } else {
            false
        },
    }
}

fn main() {
    match option {
        None => {
            if condition {
                true
            } else {
                false
            }
        }
    }
}
