webview2-com 0.33.0

Rust bindings for the WebView2 COM APIs
Documentation
# webview2-com

This crate implements Rust bindings for the [WebView2](https://aka.ms/webview2) COM APIs, as well as several important Win32 APIs necessary to build a standalone GUI application hosting WebView2. The bindings are generated by the [Windows](https://github.com/microsoft/windows-rs) crate in [webview2-com-sys](https://crates.io/crates/webview2-com-sys).

## Getting Started

Include a reference to `webview2-com` in your `Cargo.toml`:
```toml
[dependencies]
webview2-com = "0.33"
```

See the [docs](https://docs.rs/webview2-com/) or take a look at the [sample.rs](https://github.com/wravery/webview2-rs/blob/main/crates/webview2-com/examples/sample.rs) example (adapted from [microsoft/windows-samples-rs](https://github.com/microsoft/windows-samples-rs/tree/master/webview2_win32)) for more details.

## Safety

Most of the bindings are re-exported transparently from `webview2-com-sys`, and they are still marked `unsafe`. Unlike typical idiomatic Rust crates wrapped around a `-sys` crate, the emphasis of this crate is on writing as little manual wrapper code as possible. This way, `webview2-com` can project 100% of the WebView2 COM API, but the downside is you will need to wrap most uses in an `unsafe` block or function.

## Convenience Types

Most of the code added by this crate consists of convenience types to implement COM interfaces that are required for callbacks and setting options:
- [callback.rs]https://github.com/wravery/webview2-rs/blob/main/crates/webview2-com/src/callback.rs: Implements all of the event sink handler interfaces used by WebView2.
- [options.rs]https://github.com/wravery/webview2-rs/blob/main/crates/webview2-com/src/options.rs: Implements the `ICoreWebView2EnvironmentOptions...` interfaces which are passed to `CreateCoreWebView2EnvironmentWithOptions` if you want to customize the environment. The `CoreWebView2EnvironmentOptions` struct has public accessors for all supported fields with Rust types, so you do not need to use the separate `ICoreWebView2EnvironmentOptions...` COM interfaces to initialize or retrieve them.

There are also some utilities for dealing with `PWSTR` in/out-params that may be useful:
- [pwstr.rs]https://github.com/wravery/webview2-rs/blob/main/crates/webview2-com/src/pwstr.rs: `string_from_pcwstr`, `take_pwstr`, and `pwstr_from_str`.

## Windows Metadata

The Windows crate requires a Windows Metadata (`winmd`) file describing the API. The one used in this crate was generated with the [webview2-win32md](https://github.com/wravery/webview2-win32md) project. This crate needs it to use the `#[implement]` macro from the Windows crate.