contextfree / winrt-rust

Use and (eventually) make Windows Runtime APIs with Rust
Apache License 2.0
142 stars 10 forks source link

Make ComPtr results optional #54

Closed Boddlnagg closed 6 years ago

Boddlnagg commented 6 years ago

Most methods returning interface/class types could return null, so we need to return Option<ComPtr<T>>. Fixes #20.

Return values from factory methods as well as IAsync... return types are not wrapped in Option, because the former are projected as constructors in C# (which cannot return null), and the latter are meant to be used with await syntax in C#, which can not deal with null (see https://github.com/dotnet/roslyn/issues/7171).

In this PR I also finally removed the unsafe modifier from wrapper methods, because I'm sufficiently sure that these methods should be safe, and if some are not (as currently defined), then that's a bug in winrt-rust.