MAVInspect
==========
MAVLink Inspector is a CLI tool and a library to parse MAVLink protocol XML definitions.
> ### WARNING!!!
>
> This project is intended to be used with other Mavka tools. For now its API will be extremely unstable. Once the
> library will be successfully consumed by these projects, API will be stabilised.
Examples
--------
```rust
use mavinspect::parser::MAVInspector;
fn main() {
// Instantiate inspector and load list of XML definitions
let inspector = MAVInspector::new("./message_definitions").unwrap();
// Parse all XML definitions
let protocol = inspector.parse().unwrap();
// Get `minimal` dialect
let minimal = protocol.dialects().get("minimal").unwrap();
// Get heartbit message
let heartbeat_message = minimal.messages().get(&0u32).unwrap();
assert_eq!(heartbeat_message.name(), "HEARTBEAT");
println!("`HEARTBEAT` message: {:?}", heartbeat_message);
}
```
Docs
----
Documentation can be found [here](https://docs.rs/crate/mavinspect).
CLI Interface
-------------
List dialects:
```shell
mavinspect [--src <PATH TO MESSAGE DEINITIONS>] ls
```
Parse dialects:
```shell
mavinspect [--src <PATH TO MESSAGE DEINITIONS>] parse [--dst <PATH TO DESTINATION DIRECTORY>]
```
Start gRPC server to serve MAVLink definitions:
```shell
mavinspect [--src <PATH TO MESSAGE DEINITIONS>] serve
```
Roadmap
-------
**Basics** (required before publishing non-alpha version)
- [ ] Load and deserialize from `JSON` for server.
- [ ] Add examples to docs.
**DevOps**
- [ ] Release `mavinspect` binary.
- [ ] Release `mavinspect` for ARM64 and other architectures.
**Next release** (for `v0.2.0`)
- [ ] Multiple folders for XML definitions.
**Planned improvements**
- [ ] Watch message definitions and reload server on changes.
- [ ] Add standalone examples.
License
-------
> Here we simply comply with the suggested dual licensing according to
> [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/about.html) (C-PERMISSIVE).
Licensed under either of
* Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license
([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
Contribution
------------
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.